Khi chúng ta sử dụng VBA trong Excel, phần lớn là để tự động hóa các tác vụ của chúng ta.
Điều này cũng có nghĩa là hầu hết thời gian, chúng tôi làm việc với các ô và phạm vi , trang tính , sổ làm việc và các đối tượng khác là một phần của ứng dụng Excel.
Nhưng VBA mạnh hơn rất nhiều và cũng có thể được sử dụng để làm việc với các công cụ bên ngoài Excel.
Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách sử dụng VBA FileSystemObject (FSO) để làm việc với các tệp và thư mục trên hệ thống hoặc ổ đĩa mạng của bạn.
VBA FileSystemObject (FSO) là gì?
FileSystemObject (FSO) cho phép bạn truy cập vào hệ thống tệp của máy tính. Sử dụng nó, bạn có thể truy cập và sửa đổi các tập tin / thư mục / thư mục trong hệ thống máy tính của bạn.
Ví dụ, dưới đây là một số điều bạn có thể làm bằng cách sử dụng FileSystemObject trong Excel VBA:
- Kiểm tra xem tệp hoặc thư mục có tồn tại không.
- Tạo hoặc đổi tên các thư mục / tập tin.
- Nhận danh sách tất cả tên tệp (hoặc tên thư mục con) trong một thư mục.
- Sao chép tệp từ một thư mục này sang thư mục khác.
Tôi hy vọng bạn có được ý tưởng.
Tôi sẽ trình bày tất cả các ví dụ trên (cộng thêm) sau trong hướng dẫn này.
Trong khi một số điều được đề cập ở trên cũng có thể được thực hiện bằng cách sử dụng các hàm VBA truyền thống (như hàm DIR ) và các phương thức, điều đó sẽ dẫn đến các mã dài hơn và phức tạp hơn. FileSystemObject làm cho nó dễ dàng để làm việc với các tập tin và thư mục trong khi giữ mã sạch sẽ và ngắn.
Lưu ý: FSO chỉ có thể được sử dụng trong Excel 2000 và các phiên bản mới hơn.
Bạn có thể truy cập tất cả các đối tượng nào thông qua FileSystemObject?
Như tôi đã đề cập ở trên, bạn có thể truy cập và sửa đổi các tệp và thư mục bằng cách sử dụng FileSystemObject trong VBA.
Dưới đây là bảng hiển thị các đối tượng quan trọng nhất mà bạn có thể truy cập và sửa đổi bằng FSO:
Vật | Sự miêu tả |
Lái xe | Drive Object cho phép bạn nhận thông tin về ổ đĩa như cho dù nó tồn tại hay không, đó là tên đường dẫn, loại ổ đĩa (có thể tháo rời hoặc cố định), kích thước của nó, v.v. |
Thư mục | Đối tượng thư mục cho phép bạn tạo hoặc sửa đổi các thư mục trong hệ thống của bạn. Ví dụ, bạn có thể tạo, xóa, đổi tên, sao chép các thư mục bằng cách sử dụng đối tượng này. |
Tập tin | File Object cho phép bạn làm việc với các tập tin trong hệ thống của bạn. Ví dụ, bạn có thể tạo, mở, sao chép, di chuyển và xóa các tập tin bằng cách sử dụng đối tượng này. |
TextStream | Đối tượng TextStream cho phép bạn tạo hoặc đọc các tập tin văn bản. |
Mỗi đối tượng trên có các phương thức mà bạn có thể sử dụng để làm việc với các phương thức này.
Để cung cấp cho bạn một ví dụ, nếu bạn muốn xóa một thư mục, bạn sẽ sử dụng phương thức DeleteFolder của đối tượng Folder. Tương tự, nếu bạn muốn sao chép một tệp, bạn sẽ sử dụng phương thức CopyFile của đối tượng Tệp.
Đừng lo lắng nếu điều này có vẻ áp đảo hoặc khó hiểu. Bạn sẽ có được một sự hiểu biết tốt hơn nhiều khi bạn đi qua các ví dụ mà tôi đã đề cập trong hướng dẫn này.
Chỉ với mục đích tham khảo, tôi đã trình bày tất cả các phương thức FileSystemObject (cho mỗi đối tượng) ở cuối hướng dẫn này .
Kích hoạt FileSystemObject trong Excel VBA
FileSystemObject không có sẵn theo mặc định trong Excel VBA.
Vì chúng ta đang xử lý các tệp và thư mục nằm ngoài ứng dụng Excel, trước tiên chúng ta cần tạo một tham chiếu đến thư viện chứa các đối tượng này (ổ đĩa, tệp, thư mục).
Bây giờ có hai cách bạn có thể bắt đầu sử dụng FileSystemObject trong Excel VBA:
- Đặt tham chiếu đến Thư viện Thời gian chạy Microsoft Scripting (Scrrun.dll)
- Tạo một đối tượng để tham chiếu đến thư viện từ chính mã đó
Mặc dù cả hai phương thức này đều hoạt động (và tôi sẽ chỉ cho bạn cách thực hiện việc này tiếp theo), tôi khuyên bạn nên sử dụng phương pháp đầu tiên.
Lưu ý: Khi bạn bật FileSystemObject, bạn có thể truy cập tất cả các đối tượng trong đó. Điều này bao gồm FileSystemObject, Drive, Files, Folders, vv Tôi sẽ tập trung chủ yếu vào FileSystemObject trong hướng dẫn này.
Đặt tham chiếu đến thư viện thời gian chạy Microsoft Scripting
Khi bạn tạo một tham chiếu đến Thư viện Runtime Scripting, bạn cho phép Excel VBA truy cập vào tất cả các thuộc tính và phương thức của các tệp và thư mục. Một khi điều này được thực hiện, bạn có thể tham khảo các đối tượng tập tin / thư mục / ổ đĩa từ bên trong VBA Excel (giống như bạn có thể tham khảo các ô, trang tính hoặc sổ làm việc).
Dưới đây là các bước để tạo tham chiếu đến Thư viện Thời gian chạy Microsoft Scripting:
- Trong VB Editor, nhấp vào Tools.
- Nhấp vào Tham khảo.
- Trong hộp thoại Tham khảo mở ra, cuộn qua các tham chiếu có sẵn và kiểm tra tùy chọn ‘Microsoft Scripting Runtime’.
- Nhấp vào OK.
Các bước trên sẽ cho phép bạn tham khảo các đối tượng FSO từ Excel VBA.
Tạo một thể hiện của FileSystemObject trong mã
Khi bạn đã đặt tham chiếu đến thư viện ScriptS FileOystem, bạn cần phải tạo một cá thể của đối tượng FSO trong mã của bạn.
Một khi điều này được tạo ra, bạn có thể sử dụng nó trong VBA.
Dưới đây là mã sẽ đặt biến đối tượng MyFSO thành đối tượng FileSystemObject:
Sub CreatingFSO()
Dim MyFSO As FileSystemObject
Set MyFSO = New FileSystemObject
End Sub
Trong mã này, đầu tiên tôi đã khai báo biến MyFSO như là một đối tượng kiểu FileSystemObject. Điều này là có thể chỉ vì tôi đã tạo một tham chiếu đến Microsoft Scripting Runtime Library. Nếu tham chiếu không được tạo, điều này sẽ cho bạn một lỗi (vì Excel sẽ không nhận ra những gì FileSystemObject có nghĩa là).
Trong dòng thứ hai, hai điều xảy ra:
- Từ khóa MỚI tạo ra một thể hiện của FileSystemObject. Điều này có nghĩa rằng bây giờ tôi có thể sử dụng tất cả các phương pháp của FileSystemObject để làm việc với các tập tin và thư mục. Nếu bạn không tạo cá thể này, bạn sẽ không thể truy cập các phương thức của FSO.
- Từ khóa SET đặt đối tượng MyFSO thành thể hiện mới của FileSystemObject. Điều này cho phép tôi sử dụng đối tượng này để truy cập các tệp và thư mục. Ví dụ, nếu tôi cần tạo một thư mục, tôi có thể sử dụng phương thức MyFSO.CreateFolder.
Nếu bạn muốn, bạn cũng có thể kết hợp hai câu lệnh trên thành một như sau:
Sub CreatingFSO()
Dim MyFSO As New FileSystemObject
End Sub
Một lợi ích lớn của việc sử dụng phương thức này (để thiết lập tham chiếu đến Microsoft Scripting Runtime Library) là khi bạn sử dụng các đối tượng FSO trong mã của bạn, bạn sẽ có thể sử dụng tính năng IntelliSense cho thấy các phương thức và thuộc tính liên kết với một đối tượng (như được hiển thị bên dưới).
Điều này là không thể khi bạn tạo tham chiếu từ bên trong mã (được trình bày tiếp theo).
Tạo một đối tượng từ mã
Một cách khác để tạo một tham chiếu đến FSO là thực hiện nó từ mã. Trong phương thức này, bạn không cần tạo bất kỳ tham chiếu nào (như đã thực hiện trong phương thức trước).
Khi bạn đang viết mã, bạn có thể tạo một đối tượng từ bên trong mã và tham khảo Scripting.FileSystemObject.
Đoạn mã dưới đây tạo một đối tượng FSO và sau đó tạo một kiểu FileSystemObject
Sub FSODemo()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
End Sub
Trong khi điều này có vẻ thuận tiện hơn, một nhược điểm lớn của việc sử dụng phương pháp này là nó sẽ không hiển thị một IntelliSense khi bạn làm việc với các đối tượng trong FSO. Đối với tôi, đây là một tiêu cực lớn và tôi luôn khuyên bạn nên sử dụng phương pháp trước đây để kích hoạt FSO (đó là bằng cách đặt tham chiếu đến ‘Thời gian chạy Microsoft Scripting’)
Ví dụ về VBA FileSystemObject
Bây giờ chúng ta hãy đi sâu vào và xem xét một số ví dụ thực tế về việc sử dụng FileSystemObject trong Excel.
Ví dụ 1: Kiểm tra xem Tệp hoặc Thư mục có tồn tại không
Mã sau sẽ kiểm tra xem thư mục có tên ‘Kiểm tra’ tồn tại hay không (ở vị trí đã chỉ định).
Nếu thư mục tồn tại, điều kiện IF là Đúng và nó hiển thị một thông báo – ‘Thư mục tồn tại’ trong một hộp thư . Và nếu nó không tồn tại, nó sẽ hiển thị một thông điệp – Thư mục không tồn tại ‘.
Sub CheckFolderExist()
Dim MyFSO As FileSystemObject
Set MyFSO = New FileSystemObject
If MyFSO.FolderExists("C:UserssumitDesktopTest") Then
MsgBox "The Folder Exists"
Else
MsgBox "The Folder Does Not Exist"
End If
End Sub
Ví dụ 2: Tạo thư mục mới ở vị trí được chỉ định
Đoạn mã dưới đây sẽ tạo một thư mục có tên ‘Test’ trong ổ C của hệ thống của tôi (bạn sẽ phải chỉ định đường dẫn trên hệ thống của mình nơi bạn muốn tạo thư mục).
Sub CreateFolder()
Dim MyFSO As FileSystemObject
Set MyFSO = New FileSystemObject
MyFSO.CreateFolder ("C:UserssumitDesktopTest")
End Sub
Sub CreateFolder()
Dim MyFSO As FileSystemObject
Set MyFSO = New FileSystemObject
If MyFSO.FolderExists("C:UserssumitDesktopTest") Then
MsgBox "The Folder Already Exist"
Else
MyFSO.CreateFolder ("C:UserssumitDesktopTest")
End If
End Sub
Ví dụ 3: Nhận danh sách tất cả các tệp trong một thư mục
Sub GetFileNames()
Dim MyFSO As FileSystemObject
Dim MyFile As File
Dim MyFolder As Folder
Set MyFSO = New Scripting.FileSystemObject
Set MyFolder = MyFSO.GetFolder("C:UserssumitDesktopTest")
For Each MyFile In MyFolder.Files
Debug.Print MyFile.Name
Next MyFile
End Sub
Ví dụ 4: Lấy danh sách tất cả các thư mục con trong một thư mục
Mã dưới đây sẽ cung cấp tên của tất cả các thư mục con trong thư mục được chỉ định. Logic là chính xác giống như được trình bày trong ví dụ trên. Thay vì các tệp, trong mã này, chúng tôi đã sử dụng các thư mục con.
Sub GetSubFolderNames()
Dim MyFSO As FileSystemObject
Dim MyFile As File
Dim MyFolder As Folder
Dim MySubFolder As Folder
Set MyFSO = New Scripting.FileSystemObject
Set MyFolder = MyFSO.GetFolder("C:UserssumitDesktopTest")
For Each MySubFolder In MyFolder.SubFolders
Debug.Print MySubFolder.Name
Next MySubFolder
End Sub
Ví dụ 5: Sao chép tệp từ một địa điểm sang địa điểm khác
Đoạn mã dưới đây sẽ sao chép tệp từ thư mục ‘Nguồn’ và sao chép nó vào thư mục ‘Đích’.
Sub CopyFile()
Dim MyFSO As FileSystemObject
Dim SourceFile As String
Dim DestinationFolder As String
Set MyFSO = New Scripting.FileSystemObject
SourceFile = "C:UserssumitDesktopSourceSampleFile.xlsx"
DestinationFolder = "C:UserssumitDesktopDestination"
MyFSO.CopyFile Source:=SourceFile, Destination:=DestinationFolder & "SampleFileCopy.xlsx"
End Sub
Ví dụ 6: Sao chép tất cả các tệp từ một thư mục sang thư mục khác
Mã dưới đây sẽ sao chép tất cả các tệp từ thư mục Nguồn vào thư mục đích.
Sub CopyFile()
Dim MyFSO As FileSystemObject
Dim SourceFile As String
Dim DestinationFolder As String
Set MyFSO = New Scripting.FileSystemObject
SourceFile = "C:UserssumitDesktopSourceSampleFile.xlsx"
DestinationFolder = "C:UserssumitDesktopDestination"
MyFSO.CopyFile Source:=SourceFile, Destination:=DestinationFolder & "SampleFileCopy.xlsx"
End Sub
Ví dụ 6: Sao chép tất cả các tệp từ một thư mục sang thư mục khác
Mã dưới đây sẽ sao chép tất cả các tệp từ thư mục Nguồn vào thư mục đích.
Sub CopyAllFiles()
Dim MyFSO As FileSystemObject
Dim MyFile As File
Dim SourceFolder As String
Dim DestinationFolder As String
Dim MyFolder As Folder
Dim MySubFolder As Folder
SourceFolder = "C:UserssumitDesktopSource"
DestinationFolder = "C:UserssumitDesktopDestination"
Set MyFSO = New Scripting.FileSystemObject
Set MyFolder = MyFSO.GetFolder(SourceFolder)
For Each MyFile In MyFolder.Files
MyFSO.CopyFile Source:=MyFSO.GetFile(MyFile), _
Destination:=DestinationFolder & "" & MyFile.Name, Overwritefiles:=False
Next MyFile
End Sub
Đoạn mã trên sẽ sao chép tất cả các tệp từ thư mục Nguồn vào Thư mục đích.
Lưu ý rằng trong phương thức MyFSO.CopyFile, tôi đã xác định thuộc tính ‘Overwritefiles’ là False (điều này là True theo mặc định). Điều này đảm bảo rằng trong trường hợp bạn đã có tệp trong thư mục, nó không được sao chép (và bạn sẽ thấy một lỗi). Nếu bạn xóa ‘Ghi đè lên’ hoặc đặt thành True, trong trường hợp có các tệp trong thư mục đích có cùng tên, chúng sẽ bị ghi đè.
Mẹo chuyên nghiệp: Khi sao chép tệp, luôn có khả năng ghi đè tệp. Một ý tưởng hay, trong trường hợp này, là thêm dấu thời gian cùng với tên. Điều này sẽ đảm bảo rằng các tên luôn khác nhau và bạn có thể dễ dàng theo dõi các tệp được sao chép vào thời điểm nào.
Nếu bạn chỉ muốn sao chép các tệp của một tiện ích mở rộng nhất định, bạn có thể thực hiện điều đó bằng cách sử dụng câu lệnh IF Then để kiểm tra xem tiện ích có phải là xlsx hay không.
Sub CopyExcelFilesOnly()
Dim MyFSO As FileSystemObject
Dim MyFile As File
Dim SourceFolder As String
Dim DestinationFolder As String
Dim MyFolder As Folder
Dim MySubFolder As Folder
SourceFolder = "C:UserssumitDesktopSource"
DestinationFolder = "C:UserssumitDesktopDestination"
Set MyFSO = New Scripting.FileSystemObject
Set MyFolder = MyFSO.GetFolder(SourceFolder)
For Each MyFile In MyFolder.Files
If MyFSO.GetExtensionName(MyFile) = "xlsx" Then
MyFSO.CopyFile Source:=MyFSO.GetFile(MyFile), _
Destination:=DestinationFolder & "" & MyFile.Name, Overwritefiles:=False
End If
Next MyFile
End Sub
Các phương thức FileSystemObject (FSO)
Dưới đây là các phương pháp mà bạn có thể sử dụng cho từng đối tượng. Đây chỉ là mục đích tham khảo và không lo lắng quá nhiều. Việc sử dụng một số trong số này đã được thể hiện trong các ví dụ được đề cập ở trên.
FSO Methods | For Object | Description |
DriveExists | Drive | Checks whether the drive exists or not |
GetDrive | Drive | Returns an instance of the drive object based on the specified path |
GetDriveName | Drive | Reruns the drive name |
BuildPath | File/Folder | Generate a path from an existing path and a name |
CopyFile | File/Folder | Copies a file |
GetAbsolutePathName | File/Folder | Return the canonical representation of the path |
GetBaseName | File/Folder | Return base name from a path. For example, “D:TestFolderTestFile.xlsm” will return TextFile.xlsm |
GetTempName | File/Folder | Generate name that can be used to name a temporary file |
CopyFolder | Folder | Copies a folder from one location to other |
CreateFolder | Folder | Creates a new folder |
DeleteFolder | Folder | Deletes the specified folder |
FolderExists | Folder | Checks whether the Folder exists or not |
GetFolder | Folder | Returns an instance of the folder object based on the specified path |
GetParentFolderName | Folder | Retruns the name of the parent folder based on the specified path |
GetSpecialFolder | Folder | Get the location of various system folders. |
MoveFolder | Folder | Moves a folder from one location to other |
DeleteFile | File | Deletes a file |
FileExists | File | Checks if a file exists or not |
GetExtensionName | File | Returns the file extension |
GetFile | File | Returns the instance of a file object based on the specified path |
GetFileName | File | Returns the file name |
GetFileVersion | File | Returns the file version |
MoveFile | File | Moves a file |
CreateTextFile | File | Creates a text file |
GetStandardStream | File | Retrieve the standard input, output or error stream |
OpenTextFile | File | Open a file as a TextStream |
DienDan.Edu.Vn Cám ơn bạn đã quan tâm và rất vui vì bài viết đã đem lại thông tin hữu ích cho bạn.DienDan.Edu.Vn! là một website với tiêu chí chia sẻ thông tin,... Bạn có thể nhận xét, bổ sung hay yêu cầu hướng dẫn liên quan đến bài viết. Vậy nên đề nghị các bạn cũng không quảng cáo trong comment này ngoại trừ trong chính phần tên của bạn.Cám ơn.