Bài 7.7. Hàm xử lý về tập tin và thư mục

Liên hệ QC

befaint

|||||||||||||
Tham gia
6/1/11
Bài viết
14,515
Được thích
19,699
(Danh mục các hàm trong VBA)

7. Hàm xử lý về tập tin và thư mục

7.1. CHDIR
PHP:
ChDir(Path As String)
Dùng để thay đổi đường dẫn hoặc thư mục hiện tại.
Path: Là đường dẫn cần đặt về hiện tại
PHP:
Sub CHDIR_Fn()
    Dim Pth As String
    Pth = "C:\Users\Administrator\Desktop"
    ChDir (Pth) 'Duong dân hiên tai se là: "C:\Users\Administrator\Desktop" '
End Sub
7.2. CHDRIVE
PHP:
Chdrive(Drive As String)
Dùng để thay đổi ổ đĩa hiện tại
PHP:
Sub CHDRIVE_Fn()
    Dim Pth As String
    Pth = "D:\"
    ChDrive (Pth)
End Sub
7.3. CURDIR
PHP:
CurDir([Drive])
Trả về đường dẫn hiện tại
Drive: Không bắt buộc. Nếu tham số này bị bỏ qua, nó giả định ổ đĩa hiện tại.
PHP:
Sub CURDIR_Fn()
    Dim Pth As String
    Pth = CurDir()
    MsgBox Pth
End Sub
7.4. DIR
PHP:
Dir([PathName],[Attributes As VbFileArrtibute = vbNormal]) As String
Trả về tên tập tin (file) đầu tiên tương ứng với tên đường dẫn và các thuộc tính được chỉ định.
PathName: Không bắt buộc. Là đường dẫn tới một tập tin tin, thư mục. Nếu đường dẫn không được tìm thấy, hàm DIR sẽ trả về chuỗi có độ dài =0 ("")
Attributes: Không bắt buộc. Đó là tổng của các thuộc tính tập tin. Thuộc tính tập tin có thể là một hoặc kết hợp các giá trị sau:

01.png
Ghi chú:
Để lấy các tên tập tin bổ sung phù hợp với tên đường dẫn và các thuộc tính, gọi lại DIR mà không có đối số.
Có thể sử dụng ký tự đại diện để chỉ định nhiều tập tin (files). Ví dụ:
Ký tự đại diệnChú thích
* Đại diện cho bất kỳ ký tự nào với bất kỳ độ dài nào, bao gồm cả rỗng ""
? Đại diện cho một ký tự duy nhất.
PHP:
Sub DIR_Fn()
    Dim Pth As String, FileName As String, FolderName As String
    Pth = ThisWorkbook.FullName
    FileName = Dir(Pth)
    MsgBox FileName
End Sub
PHP:
Sub DIR_FileExist()
    Const FileName As String = "Vi du.xlsx"
    Dim Pth As String, chk As String
    Pth = ThisWorkbook.Path & "\"
    chk = Dir(Pth & FileName)
    If Len(chk) = 0 Then        'Không tìm thây thì tra vê chuôi có dô dài =0 '
        MsgBox "Chua tôn tai tâp tin: " & FileName
    Else
        MsgBox "Da tôn tai tâp tin " & FileName
    End If
End Sub
7.5. FILEDATETIME
PHP:
FileDateTime(PathName as String) 'As Date'
Trả về ngày và thời gian khi tập tin được tạo hoặc sửa đổi lần cuối
PHP:
Sub FILEDATETIME_Fn()
    Dim fName As String, sInfo As String
    fName = ThisWorkbook.FullName
    sInfo = FileDateTime(fName)
    MsgBox sInfo
End Sub
7.6. FILELEN
PHP:
FileLen(PathName As String) 'As Long'
Trả về kích thước của tập tin ở đơn vị bytes
PHP:
Sub FILELEN_Fn()
    Dim sInfo As String
    sInfo = FileLen(ThisWorkbook.FullName)
    MsgBox sInfo
End Sub
7.7. GETATTR
PHP:
GetAttr(PathName As String) 'As VbFileAttribute'
Trả về một số nguyên đại diện cho các thuộc tính của một tập tin, thư mục.
Hàm GetAttr() trả về một hoặc là tổng một trong các giá trị sau:

02.png
PHP:
Sub GETATTR_Fn()
    Dim fName As String
    fName = ThisWorkbook.FullName
    MsgBox GetAttr(fName)
End Sub
7.8. MKDIR
PHP:
MkDir(Path As String)
Tạo một thư mục chỉ định.
PHP:
Sub MKDIR_Fn()
    Const newFolder As String = "FolderCon"
    Dim Pth As String, chk As String
    Pth = ThisWorkbook.Path & "\"
    chk = Dir(Pth & newFolder, vbDirectory)
    'Kiêm tra su tôn tai cua thu muc "FolderCon"
    If Len(chk) = 0 Then        'Không tìm thây thì tra vê chuôi có dô dài =0
        MsgBox "Chua tôn tai thu muc: " & newFolder
        MkDir (Pth & newFolder) 'Tao thu muc moi
    Else
        MsgBox "Da tôn tai file: " & newFolder
    End If
End Sub
7.9. RMDIR
PHP:
RmDir(Path As String)
Xóa một thư mục chỉ định.
PHP:
Sub RMDIR_Fn()
    Const nameForlder As String = "xFolder"
    Dim Pth As String, chk As String
    Pth = ThisWorkbook.Path & "\"
    chk = Dir(Pth & nameForlder, vbDirectory)
    'Kiêm tra su tôn tai cua thu muc "xFolder"
    If Len(chk) = 0 Then        'Không tìm thây thì tra vê chuôi có dô dài =0
        MsgBox "Khong tim thay thu muc: " & nameForlder
    Else
        RmDir Pth & nameForlder
        MsgBox "Da xoa thu muc: " & nameForlder
    End If
End Sub
7.10. SETATTR
PHP:
SetAttr PathName As String, Attributes As VbFileAttribute
Thiết lập thuộc tính cho tập tin
PHP:
Sub SETATTR_Fn()
    Dim pathFile As String
    On Error GoTo Err
    pathFile = "D:\vidu.xlsx"
    SetAttr pathFile, vbReadOnly + vbHidden
Err:    MsgBox "Tâp tin không tôn tai."
End Sub
 
Lần chỉnh sửa cuối:
Cho biết chỗ đứng của các hàm này so với FileSystemObject
 
Upvote 0
Hàm MKDIR nếu Folder là Tiếng Việt có dấu là tịt đó.... Nên xài Fso Or cmd

Bình dân thì xài Fso ... Cao cấp 1 tị thì cmd
 
Lần chỉnh sửa cuối:
Upvote 0
tốc độ vượt trội dành cho người chỉ sử dụng các kí tự an sì cho đường dẫn và tập tin trong máy mình +-+-+-++-+-+-+

Tốc độ? Cỡ trình độ bạn mà trả lời vậy có hơi thất vọng.
Nhưng mà có lẽ lỗi tại tôi. Hầu hết dân ở đây chỉ chú trọng về tốc độ. Nhập gia tuỳ tục nhập ginag tuỳ khúc nhỉ.
 
Upvote 0
Tốc độ? Cỡ trình độ bạn mà trả lời vậy có hơi thất vọng.

anh sai rồi. Anh hãy nên đánh giá thấp khả năng của em mới đúng. Vì em chỉ là kẻ ít học, chưa từng đọc cuốn sách nào về lập trình.
Nhưng mà khả năng nghe chửi của em là chuyện khác. Xin anh giúp em và các bạn ở đây mở rộng hiểu biết về vấn đề chính anh đã hỏi ở trên. Cảm ơn anh.
 
Upvote 0
Khả năng nghe chửi của bạn không sánh được khả năng chửi của tôi đâu. Không nên thử thách.

Điểm chính là ba cái hàm này nó hơi cũ cho nên có hơi bị giới hạn. Và vì vậy chỉ nên dùng trực tiếp lúc viết code. Bởi vì nếu bạn nhớ thuộc lòng cách dùng thì code rất nhạnh.
Trong khi đó khái niệm dùng object (Filesystemobject) nó tổng quan hơn nên có thể tạo hàm bọc (wrapper) và gói trọn các thao tác (phương thức cần thiết) trong một thư viện, export ra lưu làm 1 file chấm bas. Lúc nào cần thì import cả cái file vào một code module.
Như vậy, lúc so sánh đám hàm trên với Filesystemobject thì ta so sánh theo kiểu cái nào tại chỗ và cái nào tổng quan hơn dễ gói trọn hơn.
 
Upvote 0
7.8. MKDIR
PHP:
MkDir(Path As String)
Tạo một thư mục hoặc một cây thư mục (cha\con)
Đọc chỗ này tôi hiểu là nếu thư mục cha chưa tồn tại thì nó sẽ tạo thư mục cha trước thì có đúng không? Ví dụ MkDir "D:\A\B\C" thì nếu chưa có A thì sẽ tạo A trước rồi tạo B sau đó mới tạo C.

Có hàm tạo thư mục chắc phải có hàm nào đó xóa thư mục chứ nhỉ?
 
Upvote 0
Bình dân thì xài Fso ... Cao cấp 1 tị thì cmd

"Cao cấp" nó cũng có cái giá của nó. Xe Lexus qua đường đất làm sao sánh được Toyota Hilux.

Dùng cmd khó debug bỏ bố. Nhất là thói quen dân ở đây viết code một sub một, hiếm khi chịu tách ra nhiều subs/functions. Cỡ 6 tháng sau đọc lại code, lõ mắt ra mà dòm đống cmd.
 
Upvote 0
Đọc chỗ này tôi hiểu là nếu thư mục cha chưa tồn tại thì nó sẽ tạo thư mục cha trước thì có đúng không? Ví dụ MkDir "D:\A\B\C" thì nếu chưa có A thì sẽ tạo A trước rồi tạo B sau đó mới tạo C
Em vừa thử lại thấy có sự phân biệt giữa VBA và CMD. Híc.
Đính chính lại vụ tạo cây thư mục.
Có hàm tạo thư mục chắc phải có hàm nào đó xóa thư mục chứ nhỉ?
Hàm RmDir. -\\/.
 
Upvote 0
Đọc chỗ này tôi hiểu là nếu thư mục cha chưa tồn tại thì nó sẽ tạo thư mục cha trước thì có đúng không? Ví dụ MkDir "D:\A\B\C" thì nếu chưa có A thì sẽ tạo A trước rồi tạo B sau đó mới tạo C.
Tôi thử thấy không được. Còn nếu làm trên cửa sổ CMD thì được
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom