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

Bến Hà Trương
Bến Hà Trương
Dec 25 2020

FileSystemObject được sử dụng để làm việc với các thư mục và tệp được kết nối với hệ thống. Chúng ta có thể sử dụng nó để truy cập các tệp, thư mục, ổ đĩa và các luồng văn bản.

Ngoài ra, FSO còn có thể sử dụng để tạo các tệp, thư mục. Các hoạt động này không giới hạn ở đĩa cứng của hệ thống mà là bất kỳ thiết bị nào được kết nối với file của bạn. Nghĩa là bạn có thể truy cập ổ đĩa pen, rom cd hoặc các ổ đĩa ảo được kết nối 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 hỗ trợ hoạt động của các tệp nhị phân vì Scrrun.dll hỗ trợ tạo và thao tác các 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 phương pháp để tạo FileSystemObject trong VBA:

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

Sử dụng phương pháp này trước tiên chúng ta khai báo một kiểu đối tượng biến. Sau đó, đặt tham chiếu của đối tượ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à có thể chuyển nhượng. Nghĩa là, nếu bạn chia sẻ cho các hệ thống khác, đoạn code này sẽ hoạt động hoàn hảo, cho dù 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.

Bây giờ bạn đã sẵn sàng để tạo và sử dụng FSO.

Sub LearnFso()
  Dim fso as new FileSystemObject
  Debug.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 tốt.
Ưu điểm chính của phương pháp này là bạn sẽ có thể tận dụng những ưu điểm của VBA. VBA sẽ hiển thị cho bạn tất cả các thuộc tính và phương thức của đối tượng FSO. Bạn cũng sẽ biết loại biến nào được chấp nhận và loại giá trị nào bị trả về.
Tạo đối tượng FSO
Nếu bạn chia sẻ code này cho các hệ thống khác, bạn sẽ phải yêu cầ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 định không được xác định. 
Cả hai phương pháp tạo đối tượng FSO đều có những ưu điểm và nhược điểm mà chúng ta đã đề cập bên trên. Vì vậy, tùy theo mục đích sử dụng, bạn có thể cọn phương pháp phù hợp 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 hiện một số tác vụ có ý nghĩa. Hãy quan sát các ví dụ bên dưới.

Lấy tất cả thư mục con trong một thư mục được chỉ định

Ví dụ đầu tiên chúng ta sẽ thấy là lấy tên thư mục con từ một thư mục cụ thể.
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 folder
 Dim subfdr As Folder         ' Variable for the sub folders  'Intializing the objects
 Set fdr = fso.GetFolder(fdrpath) 'Creating the folder object of given folder
 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 như thế nào? Hãy tìm hiểu từng bước một nhé.
Bước 1. Khai báo các biến mà chúng ta cần
Dim fso As FileSystemObject  ' Variable for the FileSystemObject
Dim fdr As Folder            ' Variable for the base folder
Dim 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 folder object of given folder

Trong bước này, chúng tôi khởi tạo tất cả các đối tượ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 thức getFolder của đối tượ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 loại tệp.

Bước 3. Vòng lặp để lấy tất cả tên thư mục con trong đối tượ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 tệp fdr. Chúng tôi đã sử dụng thuộc tính SubFolders của đối tượ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 tất cả đường dẫn tệp trong một thư mục và các thư mục con

Để có được tất cả các đường dẫn hoặc tên đủ điều kiện của tất cả các tệp trong một thư mục và đó là thư mục con, 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 folder
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.SubFolders
Set 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 thức trả về các tệp trong một thư mục con. Phương thức File.Path () trả về địa chỉ đầy đủ của tệp. 

Chúng ta có một vòng lặp bên trong để lặp qua tất cả các 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, chúng ta đã học cách lấy đường dẫn tệp của các thư mục cụ thể trên cửa sổ. Trong ví dụ này, chúng ta sẽ tìm hiểu cách lưu các đường dẫn đó trong tệp CSV. Để làm như vậy, chúng ta chỉ cần thêm một vài dòng vào mã. Xem các dòng mã bên dưới.

Sub LearnFso()
Dim fso As FileSystemObject
Dim fdr As Folder    ' Variable for the base folder
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 object
Dim fl As File        'to store file object fdrpath = "D:\downloads"
Set fileList = fso.CreateTextFile(fdrpath & "\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 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 thức CreateTextFile của FSO để tạo đối tượ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 chấp nhận tên của một tệp với một đường dẫn hoàn chỉnh. Biến đầu tiên đ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 để tuyên bố rằng nó không phải là tệp nhị phân. 

Trong các vòng lặp, chúng ta thay thế debug.print bằng phương thức 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 đã có thể sử dụng tốt FileSystemObject trong VBA Excel. Đừng quên tham gia Gitiho ngay hôm nay nhé, chúng ta còn nhiều mẹo và thủ thuật tin học văn phòng hữu ích khác chờ được khám phá.

0/5 - (0 bình chọn)

0/5 - (0 bình chọn)

Bài viết liên quan

Cách ứng dụng hàm INT và MOD cho lễ tân và các công việc khác

Cách ứng dụng hàm INT và MOD cho lễ tân và các công việc khác

Hướng dẫn cách tách địa chỉ ra khỏi chuỗi

Hướng dẫn cách tách địa chỉ ra khỏi chuỗi

CÁCH TÍNH ĐIỂM TRUNG BÌNH VÀ XẾP LOẠI TRONG EXCEL (KÈM BÀI TẬP)

CÁCH TÍNH ĐIỂM TRUNG BÌNH VÀ XẾP LOẠI TRONG EXCEL (KÈM BÀI TẬP)

Hướng dẫn kiểm tra giá trị trùng lặp cực đơn giản trên Excel 2010, 2013, 2016, 2019

Hướng dẫn kiểm tra giá trị trùng lặp cực đơn giản trên Excel 2010, 2013, 2016, 2019

Cách cộng, trừ ngày tháng năm trong Excel để tính số ngày siêu nhanh cho kế toán

Cách cộng, trừ ngày tháng năm trong Excel để tính số ngày siêu nhanh cho kế toán

Hướng dẫn 4 cách bôi đen trong Excel đơn giản và nhanh chóng

Hướng dẫn 4 cách bôi đen trong Excel đơn giản và nhanh chóng

@ 2020 - Bản quyền của Công ty cổ phần công nghệ giáo dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở kế hoạch và đầu tư TP. Hà Nội