Excel +VBA :Tự động chuyển đổi hàng loạt Word sang PDF với tên file tùy chỉnh


Ứng dụng:

  • Tự động hóa quy trình: Thay thế thao tác thủ công bằng xử lý hàng loạt; chuyển đổi hàng trăm tài liệu Word sang PDF chỉ với một thao tác kích hoạt Macro.
  • Bảo mật dữ liệu tuyệt đối: Vận hành hoàn toàn trên môi trường ngoại tuyến (Local). Không thông qua dịch vụ trung gian, loại bỏ rủi ro rò rỉ dữ liệu nhạy cảm như hợp đồng, báo cáo tài chính.
  • Chuẩn hóa lưu trữ: Tự động đặt tên file (Naming Convention) và phân loại vào thư mục mục tiêu dựa trên dữ liệu quản lý tại Excel.
  • Tối ưu tài nguyên: Sử dụng trực tiếp bộ Microsoft Office có sẵn, không yêu cầu cài đặt phần mềm bên thứ ba hay thư viện phức tạp.
  • Kiểm soát dữ liệu: Cho phép rà soát danh sách file, đường dẫn và tên gọi dự kiến ngay trên bảng tính trước khi thực thi để đảm bảo tính chính xác.


1. Sử dụng Power query hoặc VBA, tạo excel file như sau: 


Trong đó:

Cột A: fullpath của file word 
Cột B:folder path của chỗ muốn lưu file PDF
Cột C: PDF file name :lấy theo file word hoặc đặt lại theo ý muốn
Cột A-C: dùng Power query để lấy wordpath (A) và PDF name (C).
Nếu phiên bản Excel không hỗ trợ power query, có thế lấy bằng script macro sau:


Sub GetFileDOCX()

    Dim vFile As Variant

    Dim i As Long

    Dim fileName As String

    vFile = Application.GetOpenFilename("Word Files (*.docx), *.docx", , , , True)

    If IsArray(vFile) Then

        For i = 2 To UBound(vFile) ‘insert từ dòng 2

            Cells(i, 1) = vFile(i) ‘insert file path vào cột A

            fileName = Mid(vFile(i), InStrRev(vFile(i), "\") + 1)

            Cells(i, 3) = Left(fileName, InStrRev(fileName, ".") - 1) ‘insert file name vào cột C

        Next i

    End If

End Sub


Khi run code này, màn hình chọn file sẽ hiển thị.Sau khi chọn xong, toàn bộ đường dẫn và tên của các file sẽ tự động đổ vào cột A và C




Bước 2: Sau khi đã có thông tin file Word thì chạy sub này để convert các file word sang PDF

Sub convertPDF()

Dim lRow As Long

    Dim wordApp As Object

    Dim i As Long

    'tim dong cuoi cung co data trong cot A

    lRow = Cells(Rows.Count, 1).End(xlUp).Row


    ' tao object word

    Set wordApp = CreateObject("Word.Application")


    ' lap qua tung dong

    For i = 2 To lRow

        ' duong dan luu file

        Dim pdfPath As String

        pdfPath = Range("B" & i).Value & "\" & Range("C" & i).Value & ".PDF"


        ' OPEN WORD

        wordApp.Documents.Open Range("A" & i).Value

        wordApp.Visible = True

        wordApp.Activate


        ' xuat file word sang PDF

        wordApp.ActiveDocument.ExportAsFixedFormat OutputFileName:=pdfPath, _

            ExportFormat:=17, _

            OpenAfterExport:=False, _

            OptimizeFor:=0, _

            Range:=0, _

            From:=1, To:=1, _

            Item:=0, _

            IncludeDocProps:=True, _

            KeepIRM:=True, _

            CreateBookmarks:=0, _

            DocStructureTags:=True, _

            BitmapMissingFonts:=True, _

            UseISO19005_1:=False


        ' CLOSE WORD

        wordApp.ActiveDocument.Close False

    Next i

    wordApp.Quit

    Set wordApp = Nothing

End Sub


KẾT QUẢ:



 




Nhận xét