Sửa lỗi VBA Run-time Error 76: 'Path Not Found' trong Excel

beginner📊 Microsoft Excel2026-07-09| Microsoft Excel (Office 365, 2021, 2019, 2016) trên Windows 10/11

Error Message

Run-time error '76': Path not found
#vba#excel#tự-động-hóa#khắc-phục-lỗi#filesystemobject

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\Documents sẽ 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.

Related Error Notes