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

Nội dung được viết bởi Bến Hà Trương

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.

Với VBA, bạn có thể tăng ít nhất 200% năng suất và tiết kiệm thời gian làm việc một cách tối đa. 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.

Nếu bạn đang không biết học lập trình VBA trong Excel ở đâu, tham khảo ngay các khóa học của Gitiho ngay dưới đây:

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.
 

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

 

 

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á.

Deal lớn - Giá hời!

Gitiho giảm giá khóa học Hạch toán Kế toán căn bản (Nguyên lý kế toán), dành cho người mới bắt đầu học về kế toán hoặc không còn nhớ về định khoản kế toán.

Giá gốc của khóa học là 699K, hiện đang được giảm còn 299K! Nhập thêm mã code KETOAN49K để sở hữu khóa học chất lượng chỉ 49K!

Thời hạn áp dụng chỉ đến 01/06 - Nhấn vào banner bên dưới để tìm hiểu thêm!

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

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

0 thảo luận

@ 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
Giấy phép mạng xã hội số: 588, cấp bởi Bộ thông tin và truyền thông