Thủ Thuật

Hướng dẫn sử dụng FileSystemObject (FSO) trong VBA Excel

FileSystemObject được sử dụng để thao tác với những thư mục và tệp được liên kết với mạng lưới hệ thống. Chúng ta hoàn toàn có thể sử dụng nó để truy vấn những tệp, thư mục, ổ đĩa và những luồng văn bản .Ngoài ra, FSO còn hoàn toàn có thể sử dụng để tạo những tệp, thư mục. Các hoạt động giải trí này không số lượng giới hạn ở đĩa cứng của mạng lưới hệ thống mà là bất kể thiết bị nào được liên kết với file của bạn. Nghĩa là bạn hoàn toàn có thể truy vấn ổ đĩa pen, rom cd hoặc những ổ đĩa ảo được liên kết khác .

Đây là những thao tác chúng ta có thể thực hiện bằng FileSystemObject trong VBA:

  • Để tạo, mở, đọc, ghi và xóa các tệp văn bản.
  • Để thêm, thay đổi và xóa các thư mục.
  • Lặp lại các tệp và thư mục.
  • Để sao chép và di chuyển tệp hoặc thư mục sang nơi khác.
  • Để kiểm tra xem một tệp hoặc thư mục có tồn tại ở vị trí hay không

Làm thế nào để truy cập FileSystemObject trong VBA?

Đối tượng hệ thống tệp là một phần của Microsoft Scripting Runtime Library. Để truy cập một FileSystemObject, chúng ta cần kết nối hoặc thêm một tham chiếu đến Microsoft Scripting Runtime Library hoặc Scrrun.dll .

Lưu ý : FileSystemObject không tương hỗ hoạt động giải trí của những tệp nhị phân vì Scrrun. dll tương hỗ tạo và thao tác những tệp bởi TextStream Object .

Xem thêm khóa học Tuyệt đỉnh VBA – Viết code trong tầm tay để bạn có thể tăng ít nhất 200% năng suất làm việc. Hơn thế nữa, khi tận dụng lợi thế của lập trình VBA để tự động hóa thao tác và nghiệp vụ trên Excel, bạn có thể tiết kiệm hàng giờ mệt mỏi vì làm báo cáo, quản lý dữ liệu.

Cách phương pháp để tạo FileSystemObject trong VBA Excel

Có hai chiêu thức để tạo FileSystemObject trong VBA :

Tạo đối tượng FSO bằng phương thức CreateObject:

Sử dụng chiêu thức này thứ nhất tất cả chúng ta khai báo một kiểu đối tượng người dùng biến. Sau đó, đặt tham chiếu của đối tượng người dùng FSO cho biến đó bằng cách sử dụng CreateObject :

Sub LearnFso()


 'Creating the object variable

  Dim fso As Object

 

 'Create the FileSystemObject using Create Object Method 

 Set fso = CreateObject("Scripting.FileSystemObject")

 Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR")

End Sub

Phương thức này là động và hoàn toàn có thể chuyển nhượng ủy quyền. Nghĩa là, nếu bạn san sẻ cho những mạng lưới hệ thống khác, đoạn code này sẽ hoạt động giải trí tuyệt đối, mặc dầu bạn đang sử dụng phiên bản Microsoft Runtime Scripting nào .

Hạn chế duy nhất là bạn sẽ không thể tận dụng những ưu điểm mà VBA cung cấp. Bạn sẽ phải phụ thuộc vào kiến ​​thức của mình để sử dụng tất cả các thuộc tính và phương thức của FileSystemObject.

Tạo đối tượng FSO bằng cách thêm tham chiếu vào Microsoft Runtime Scripting

Bạn có thể trực tiếp tạo một FileSystemObject trong VBA bằng cách sử dụng từ khóa mới. Đối với cách này, bạn sẽ phải thêm tham chiếu đến Microsoft Scripting Runtime mới nhất trong hệ thống của mình.

Để thêm tham chiếu, hãy chuyển đến tùy chọn tham chiếu trong menu công cụ. Tại đây, hãy tìm dll Microsoft Scripting Runtime. Kiểm tra và nhấp vào OK.

Hướng dẫn sử dụng FileSystemObject (FSO) trong VBA Excel 1Bây giờ bạn đã sẵn sàng chuẩn bị để tạo và sử dụng FSO .

Sub LearnFso ( )Dim fso as new FileSystemObjectDebug. Print fso. GetBaseName ( " E : \ MTR \ Feb ' 18 MTR " )End Sub

hoặc là

Sub LearnFso ( )
Dim fso as FileSystemObject
Set fso = New FileSystemObject
Debug. Print fso. GetBaseName ( " E : \ MTR \ Feb ' 18 MTR " )
End Sub

Cả hai đoạn code này đều hoạt động giải trí tốt .Ưu điểm chính của chiêu thức này là bạn sẽ hoàn toàn có thể tận dụng những ưu điểm của VBA. VBA sẽ hiển thị cho bạn toàn bộ những thuộc tính và phương pháp của đối tượng người dùng FSO. Bạn cũng sẽ biết loại biến nào được đồng ý và loại giá trị nào bị trả về .Tạo đối tượng FSO
Nếu bạn san sẻ code này cho những mạng lưới hệ thống khác, bạn sẽ phải nhu yếu họ thêm tham chiếu đến Scripting Runtime từ tools của họ, nếu không sẽ gặp lỗi biên dịch bởi kiểu do người dùng xác lập không được xác lập .Cả hai chiêu thức tạo đối tượng người dùng FSO đều có những ưu điểm và điểm yếu kém mà tất cả chúng ta đã đề cập bên trên. Vì vậy, tùy theo mục tiêu sử dụng, bạn hoàn toàn có thể cọn giải pháp tương thích nhất .

Trong phần tiếp theo của bài viết này, chúng ta sẽ sử dụng phương pháp thứ hai để tạo FileSystemObject.

Ví dụ về cách sử dụng FileSystemObject trong VBA Excel

Chúng ta đã biết cách tạo FileSystemObject trong VBA, hãy sử dụng kiến ​ ​ thức này để thực thi một số ít tác vụ có ý nghĩa. Hãy quan sát những ví dụ bên dưới .

Lấy toàn bộ thư mục con trong một thư mục được chỉ định

Ví dụ tiên phong tất cả chúng ta sẽ thấy là lấy tên thư mục con từ một thư mục đơn cử .

Sub LearnFso ( )
' decaring variables that we will need
Dim fso As FileSystemObject ' Variable for the FileSystemObject
 Dim fdr As Folder            ' Variable for the base folder

Dim fdrpath As String ' to store path of base thư mục Dim subfdr As Folder         ' Variable for the sub folders


 'Intializing the objects

Set fdr = fso. GetFolder ( fdrpath ) ' Creating the thư mục object of given thư mục fdrpath = "D:\Downloads" 'Declaring the folder

 Set fso = New FileSystemObject 'Creating the fso object


End Sub 'loop to get all the sub folders name in

 For Each subfdr In fdr.SubFolders

  Debug.Print subfdr.Name

 Next subfdr

Khi bạn chạy đoạn mã trên, đây là những gì bạn nhận được .

cách sử dụng FileSystemObject trong VBA Excel

Đoạn code này hoạt động giải trí như thế nào ? Hãy khám phá từng bước một nhé .

Bước 1. Khai báo những biến mà tất cả chúng ta cần

Dim fso As FileSystemObject ' Variable for the FileSystemObjectDim fdr As Folder ' Variable for the base thư mụcDim subfdr As Folder ' Variable for the sub folders

Đầu tiên, chúng ta đã khai báo tất cả các biến mà chúng ta sẽ cần trong ví dụ này. Biến đầu tiên tất nhiên là đối tượng fso as file sytem. Hai biến fdr và subfdr thuộc loại thư mục. Chúng ta sẽ sử dụng đối tượng fso để tạo đối tượng kiểu tệp thay vì tạo trực tiếp. Biến fdrpath is use được sử dụng để giữ đường dẫn của thư mục cơ sở mà chúng ta muốn lấy tất cả các thư mục con.

Bước 2. Khởi chạy các đối tượng

drpath = " D : \ Downloads "'Declaring the folder

Set fso = New FileSystemObject' Creating the fso object

Set fdr = fso. GetFolder ( fdrpath )' Creating the thư mục object of given thư mục

Trong bước này, chúng tôi khởi tạo tổng thể những đối tượng người dùng mà chúng tôi đã khai báo ngoại trừ subfdr. Lưu ý rằng chúng tôi đã intialize biến tệp fdr bằng phương pháp getFolder của đối tượng người dùng fso .Phương thức GetFolder ( ) của FileSystemObject lấy đường dẫn của một thư mục hoặc thư mục dưới dạng chuỗi và trả về đối tượng người tiêu dùng loại tệp .Bước 3. Vòng lặp để lấy tổng thể tên thư mục con trong đối tượng người dùng thư mục

For Each subfdr In fdr.SubFolders
  Debug.Print subfdr.Name
Next subfdr

Ở đây chúng tôi đã sử dụng vòng lặp for each để lặp qua từng thư mục con trong đối tượng người tiêu dùng tệp fdr. Chúng tôi đã sử dụng thuộc tính SubFolders của đối tượng người tiêu dùng tệp để lặp lại. Sau đó, sử dụng thuộc tính name để lấy tên của mỗi thư mục con .

Lấy toàn bộ đường dẫn tệp trong một thư mục và những thư mục con

Để có được tổng thể những đường dẫn hoặc tên đủ điều kiện kèm theo của tổng thể những tệp trong một thư mục và đó là thư mục con, tất cả chúng ta cần thêm một vài dòng nữa bên trong đoạn code của ví dụ 1 .

Sub LearnFso ( )
Dim fso As FileSystemObject
Dim fdr As Folder ' Variable for the base thư mục
Dim subfdr As Folder ' Variable for the sub folders

Dim fdrpath As String 'to store path of base folder
fdrpath = " D : \ downloads "Dim fl As File        'to store file object


Set fso = New FileSystemObject

For Each subfdr In fdr. SubFoldersSet fdr = fso.GetFolder(fdrpath)

'loop to get all the sub folders name in


Next subfdr For Each fl In subfdr.Files  'to loop throgh each file

  Debug.Print fl.Path 'getting file name

 Next fl


End Sub'to get the files of main folder

For Each fl In fdr.Files

 Debug.Print fl.Path

Next fl

Phương thức Folder. Files ( ) là phương pháp trả về những tệp trong một thư mục con. Phương thức File. Path ( ) trả về địa chỉ vừa đủ của tệp .Chúng ta có một vòng lặp bên trong để lặp qua toàn bộ những tệp trong thư mục con và thư mục chính .

Để lấy các tệp của thư mục chính, chúng ta sử dụng một vòng lặp khác.

Lưu tên tệp trong tệp CSV

Trong ví dụ trước, tất cả chúng ta đã học cách lấy đường dẫn tệp của những thư mục đơn cử trên hành lang cửa số. Trong ví dụ này, tất cả chúng ta sẽ khám phá cách lưu những đường dẫn đó trong tệp CSV. Để làm như vậy, tất cả chúng ta chỉ cần thêm một vài dòng vào mã. Xem những dòng mã bên dưới .

Sub LearnFso ( )
Dim fso As FileSystemObject
Dim fdr As Folder ' Variable for the base thư mục
Dim subfdr As Folder ' Variable for the sub folders

Dim fdrpath As String 'to store path of base folder
Dim fileList As TextStream ' A textstream objectDim fl As File        'to store file object


fdrpath = "D:\downloads"

Set fileList = fso. CreateTextFile ( fdrpath và " \ File List in This Folder. csv ", True, False )Set fso = New FileSystemObject

Set fdr = fso.GetFolder(fdrpath)


For Each fl In subfdr. Files ' to loop through each file'loop to get all the sub folders name in

For Each subfdr In fdr.SubFolders


For Each fl In fdr. Files   fileList.Write fl.Path & ","

 Next fl

Next subfdr

'to get the files of main folder


End Sub fileList.Write fl.Path & ","

Next fl

 fileList.Close

Ở đây, chúng ta đã khai báo một đối tượng mới của kiểu FileStream có tên là fileList

Chúng ta cũng đã khởi tạo biến filelist với một đối tượng người dùng filestream bằng dòng bên dưới .

Set fileList = fso.CreateTextFile(fdrpath & “\File List in This Folder.csv”, True, False)

Tiếp theo, sử dụng phương pháp CreateTextFile của FSO để tạo đối tượng người tiêu dùng FileStream. Đối tượng này sẽ tạo ra một tệp văn bản .Phương thức này gật đầu tên của một tệp với một đường dẫn hoàn hảo. Biến tiên phong đang làm như vậy .

Chúng ta sử dụng phần mở rộng .csv để tạo tệp csv. Biến thứ hai được sử dụng để cho phép ghi đè.

Đối số thứ ba là False để công bố rằng nó không phải là tệp nhị phân .Trong những vòng lặp, tất cả chúng ta thay thế sửa chữa debug.print bằng phương pháp filelist. Write để ghi từng đường dẫn tệp trong tệp được tạo .Hy vọng qua bài viết này, bạn đã hoàn toàn có thể sử dụng tốt FileSystemObject trong VBA Excel. Đừng quên tham gia Gitiho ngay thời điểm ngày hôm nay nhé, tất cả chúng ta còn nhiều mẹo và thủ pháp tin học văn phòng hữu dụng khác chờ được tò mò .

Những bài viết liên quan

Nút quay lại đầu trang