Kịch bản lỗi
Hãy tưởng tượng macro của bạn đã hoạt động hoàn hảo trong nhiều tháng. Đột nhiên, vào ngày đầu tiên của quý mới, nó bị treo với thông báo 'Path not found'. Điều này thường xảy ra khi một macro cố gắng lưu tệp PDF hoặc xuất tệp CSV vào một thư mục chưa được tạo.
Run-time error '76': Path not found
Khi bạn nhấn nút "Debug", Excel thường làm nổi bật các dòng chứa Open, SaveAs, FileCopy, hoặc ChDir. Mã code không hẳn bị hỏng. Nó chỉ đơn giản là đang tìm kiếm một thư mục không tồn tại trên ổ đĩa.
Tại sao lỗi này xảy ra
VBA hoạt động cực kỳ máy móc. Nếu bạn yêu cầu nó lưu tệp vào C:\Company\Invoices\2024\January\Inv_001.xlsx, mọi thư mục trong chuỗi đó phải tồn tại từ trước. VBA sẽ không tự xây dựng cấu trúc thư mục cho bạn. Nếu chỉ cần một thư mục con bị thiếu, quá trình sẽ dừng lại. Các nguyên nhân phổ biến bao gồm:
- Tên người dùng được viết cứng (Hardcoded): Sử dụng đường dẫn như
C:\Users\Sarah\Documentssẽ thất bại ngay lập tức khi Mike cố gắng chạy cùng một macro đó trên máy tính xách tay của anh ấy. - Thư mục dựa trên ngày tháng: Các macro tạo thư mục mới cho mỗi tháng (ví dụ: "\2024\February") sẽ bị lỗi vào ngày đầu tiên của tháng nếu thư mục đó không được tạo thủ công.
- Ngắt kết nối mạng: Một ổ đĩa mạng (như
Z:\) chưa được kết nối lại sau khi khởi động lại máy.
Sửa lỗi nhanh: Kiểm tra thực tế thủ công
Trước khi đi sâu vào mã code, hãy xác minh xem đường dẫn có thực sự tồn tại trên hệ thống của bạn hay không. Bạn có thể thực hiện việc này trong vài giây:
- Di chuột qua biến đường dẫn trong trình soạn thảo VBA để xem giá trị hiện tại.
- Sao chép toàn bộ chuỗi, nhưng loại bỏ tên tệp ở cuối.
- Nhấn
Win + R, dán đường dẫn vào hộp thoại và nhấn Enter. - Nếu Windows báo lỗi, bạn đã xác nhận rằng thư mục bị viết sai chính tả hoặc bị thiếu.
Cách sửa lỗi vĩnh viễn 1: Xác thực thư mục trước khi lưu
Ngăn chặn lỗi bằng cách kiểm tra xem thư mục có tồn tại hay không trước khi bạn cố gắng lưu bất cứ thứ gì. Hàm Dir là cách nhanh nhất để thực hiện việc này. Nếu Dir trả về một chuỗi rỗng, đường dẫn đó không hợp lệ.
Sub SaveReport()
Dim folderPath As String
folderPath = "C:\MonthlyExports\Reports\"
' Xác minh thư mục tồn tại trước khi tiếp tục
If Dir(folderPath, vbDirectory) = "" Then
MsgBox "Dừng lại! Thư mục bị thiếu: " & folderPath, vbCritical
Exit Sub
End If
ActiveWorkbook.SaveAs folderPath & "Final_Report.xlsx"
End Sub
Cách sửa lỗi vĩnh viễn 2: Tự động tạo các thư mục bị thiếu
Một macro thông minh không chỉ phàn nàn về việc thiếu thư mục; nó sẽ tự tạo thư mục đó. Bạn có thể sử dụng lệnh MkDir để tạo một thư mục. Lưu ý rằng MkDir chỉ có thể tạo một cấp thư mục tại một thời điểm, vì vậy thư mục cha phải tồn tại sẵn.
Sub SmartSave()
Dim targetPath As String
targetPath = "C:\Reports\" & Year(Date)
' Tạo thư mục năm nếu nó chưa tồn tại
If Dir(targetPath, vbDirectory) = "" Then
MkDir targetPath
End If
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=targetPath & "\Export.pdf"
End Sub
Cách sửa lỗi vĩnh viễn 3: Tạo các thư mục lồng nhau phức tạp
Nếu bạn cần tạo một đường dẫn phức tạp như C:\Archive\2024\Marketing\Project_A, hãy sử dụng FileSystemObject (FSO). Nó linh hoạt hơn nhiều so với các lệnh VBA tiêu chuẩn. Đầu tiên, hãy vào Tools > References trong trình soạn thảo VBA và tích chọn Microsoft Scripting Runtime.
Sub CreateDeepPath()
Dim folderPath As String
folderPath = "C:\Database\Backups\Archive\" & Year(Date)
' Sử dụng một chương trình con hỗ trợ để xây dựng toàn bộ chuỗi thư mục
EnsurePathExists folderPath
ActiveWorkbook.SaveAs folderPath & "\Backup.xlsx"
End Sub
Sub EnsurePathExists(ByVal fullPath As String)
Dim fso As New FileSystemObject
Dim parts() As String
Dim currentPath As String
Dim i As Integer
parts = Split(fullPath, "\")
currentPath = parts(0)
For i = 1 To UBound(parts)
currentPath = currentPath & "\" & parts(i)
If Not fso.FolderExists(currentPath) Then
fso.CreateFolder currentPath
End If
Next i
End Sub
Kiểm tra giải pháp
Để đảm bảo giải pháp của bạn hoạt động ổn định, hãy thử bài kiểm tra này: xóa thư mục đích khỏi ổ đĩa và chạy macro. Một giải pháp thành công sẽ tự động tạo lại thư mục và lưu tệp mà không hiển thị cửa sổ thông báo Error 76. Chạy nó lần thứ hai để đảm bảo mã code xác định chính xác rằng thư mục đã tồn tại.

