VBA in nhiều file word cùng 1 folder

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Dương Thanh Hương

Thành viên mới
Tham gia
20/6/18
Bài viết
7
Được thích
0
Em muốn xin 1 code VBA để in nhiều file word cùng 1 folder và có thể chọn số bản in. Ví dụ là in cùng lúc 10 file, và tất cả đều in thành 4 bản.
Cả nhà giúp em với ạ
 
Em muốn xin 1 code VBA để in nhiều file word cùng 1 folder và có thể chọn số bản in. Ví dụ là in cùng lúc 10 file, và tất cả đều in thành 4 bản.
Cả nhà giúp em với ạ
Bạn tham khảo thử file đính kèm nhé, khai báo dữ liệu ở ô B1, B2 rồi bấm nút In để xem kết quả nhé.
 

File đính kèm

  • In nhiều file word cùng 1 folder #zaq.xlsm
    19.7 KB · Đọc: 18
Upvote 0
E
Bạn tham khảo thử file đính kèm nhé, khai báo dữ liệu ở ô B1, B2 rồi bấm nút In để xem kết quả nhé.
e cảm ơn. Mai có máy tính e làm thử ạ.
E nhờ thêm chút. Có cách nào để làm code VBA mở folder cần in xong mình chọn các file cần trong folder rồi chạy lệnh in với số bản mong muốn ko ạ?
Ví dụ có 10 file trong folder, code mở cửa sổ folder cho mình chọn 4 file, sau đó lệnh in tự chạy in thành 4 bản (nếu được chọn số bản in thì quá tốt ạ)
 
Upvote 0
E

e cảm ơn. Mai có máy tính e làm thử ạ.
E nhờ thêm chút. Có cách nào để làm code VBA mở folder cần in xong mình chọn các file cần trong folder rồi chạy lệnh in với số bản mong muốn ko ạ?
Ví dụ có 10 file trong folder, code mở cửa sổ folder cho mình chọn 4 file, sau đó lệnh in tự chạy in thành 4 bản (nếu được chọn số bản in thì quá tốt ạ)
Bạn xem file đính kèm, có thêm tùy chọn In tất cả các file từ một thư mục bất kỳ, chọn loại file tùy chọn bất kỳ (doc, pdf, xlsx, ...) và số lượng bản in tùy ý.
1728610739346.png
 

File đính kèm

  • In nhiều files tùy chọn #V1.xlsm
    26.1 KB · Đọc: 11
Lần chỉnh sửa cuối:
Upvote 0
Bấm ok sẽ ra màn hình tiếp theo để chọn file em nhé
em in được rồi ạ. em cảm ơn.
em gặp vấn đề mới: nếu là file word thì khi chạy, lệnh sẽ mở từng file word ra chứ ko chạy ẩn như module1 và sẽ in được 1 bản thôi ạ, đến bản tiếp theo thì máy sẽ hiện ra thế này, em chọn ok thì in tiếp được nhưng như vậy thì 2 bản sẽ ko in liền được với nhau. xem giúp em ạ.
1728618040193.png
Bài đã được tự động gộp:

Mình bị lỗi như thế này. Xin cách xử lý lỗi
module này thì máy mình chạy mượt luôn
 
Lần chỉnh sửa cuối:
Upvote 0
em in được rồi ạ. em cảm ơn.
em gặp vấn đề mới: nếu là file word thì khi chạy, lệnh sẽ mở từng file word ra chứ ko chạy ẩn như module1 và sẽ in được 1 bản thôi ạ, đến bản tiếp theo thì máy sẽ hiện ra thế này, em chọn ok thì in tiếp được nhưng như vậy thì 2 bản sẽ ko in liền được với nhau. xem giúp em ạ.
View attachment 304650
Bài đã được tự động gộp:


module này thì máy mình chạy mượt luôn

Em dùng bản cập nhật này nhé!
 

File đính kèm

  • In nhiều files tùy chọn #V2.xlsm
    26 KB · Đọc: 4
Upvote 0
Sao không viết luôn trong Word cho gọn nhỉ, cái này chẳng liên quan gì đến Excel cả.
Word mình không rành nên tiện tay viết trên Excel.
Mình bị lỗi như thế này. Xin cách xử lý lỗi
Bạn thay toàn bộ code cũ ở Module 1 bằng code sau thử nhé:
PHP:
Sub InNhieuFilesWord()
    Dim FolderPath  As String
    Dim fso         As Object
    Dim folder      As Object
    Dim file        As Object
    Dim wordApp     As Object
    Dim wordDoc     As Object
    Dim printCopies As Integer
    Dim fileCount   As Integer

    ' Tat cap nhat man hinh va canh bao
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Application.EnableEvents = False
    
    ' Duong dan den thu muc chua cac file Word
    FolderPath = Sheet1.Range("B1").Value & "\"
    
    ' So ban in cho moi file
    printCopies = Sheet1.Range("B2").Value
    
    ' Khoi tao FileSystemObject
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set folder = fso.GetFolder(FolderPath)
    
    ' Khoi tao ung dung Word
    Set wordApp = CreateObject("Word.Application")
    wordApp.Visible = False ' An Word de tang toc do
    
    ' Dem so file da in
    fileCount = 0
    
    ' Lap qua cac file trong thu muc
    For Each file In folder.Files
        If LCase(fso.GetExtensionName(file.Name)) = "docx" Or _
           LCase(fso.GetExtensionName(file.Name)) = "docm" Or _
           LCase(fso.GetExtensionName(file.Name)) = "doc" Then
          
            ' Mo file Word
            Set wordDoc = wordApp.Documents.Open(file.Path, ReadOnly:=True)
            
            ' In file voi so ban in da chi dinh
            wordDoc.PrintOut Copies:=printCopies
            
            ' Dong file Word ma khong luu thay doi
            wordDoc.Close SaveChanges:=False
            
            ' Tang so file da in
            fileCount = fileCount + 1
            
        End If
    Next file
    
    ' Dong ung dung Word
    wordApp.Quit

    ' Giai phong bo nho
    Set wordDoc = Nothing
    Set wordApp = Nothing
    Set folder = Nothing
    Set fso = Nothing
    
    ' Kich hoat lai cap nhat man hinh va canh bao
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    Application.EnableEvents = True

    ' Hien thi thong bao hoan thanh
    MsgBox "Da in xong " & fileCount & " file Word, moi file " & printCopies & " ban.", vbInformation
End Sub
 
Upvote 0
Word mình không rành nên tiện tay viết trên Excel.

Bạn thay toàn bộ code cũ ở Module 1 bằng code sau thử nhé:
PHP:
Sub InNhieuFilesWord()
    Dim FolderPath  As String
    Dim fso         As Object
    Dim folder      As Object
    Dim file        As Object
    Dim wordApp     As Object
    Dim wordDoc     As Object
    Dim printCopies As Integer
    Dim fileCount   As Integer

    ' Tat cap nhat man hinh va canh bao
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Application.EnableEvents = False
  
    ' Duong dan den thu muc chua cac file Word
    FolderPath = Sheet1.Range("B1").Value & "\"
  
    ' So ban in cho moi file
    printCopies = Sheet1.Range("B2").Value
  
    ' Khoi tao FileSystemObject
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set folder = fso.GetFolder(FolderPath)
  
    ' Khoi tao ung dung Word
    Set wordApp = CreateObject("Word.Application")
    wordApp.Visible = False ' An Word de tang toc do
  
    ' Dem so file da in
    fileCount = 0
  
    ' Lap qua cac file trong thu muc
    For Each file In folder.Files
        If LCase(fso.GetExtensionName(file.Name)) = "docx" Or _
           LCase(fso.GetExtensionName(file.Name)) = "docm" Or _
           LCase(fso.GetExtensionName(file.Name)) = "doc" Then
        
            ' Mo file Word
            Set wordDoc = wordApp.Documents.Open(file.Path, ReadOnly:=True)
          
            ' In file voi so ban in da chi dinh
            wordDoc.PrintOut Copies:=printCopies
          
            ' Dong file Word ma khong luu thay doi
            wordDoc.Close SaveChanges:=False
          
            ' Tang so file da in
            fileCount = fileCount + 1
          
        End If
    Next file
  
    ' Dong ung dung Word
    wordApp.Quit

    ' Giai phong bo nho
    Set wordDoc = Nothing
    Set wordApp = Nothing
    Set folder = Nothing
    Set fso = Nothing
  
    ' Kich hoat lai cap nhat man hinh va canh bao
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    Application.EnableEvents = True

    ' Hien thi thong bao hoan thanh
    MsgBox "Da in xong " & fileCount & " file Word, moi file " & printCopies & " ban.", vbInformation
End Sub
Vẫn bị lỗi như trên. Không biết có phải do Office không? Mình đang sử dụng Office 2021
 

File đính kèm

  • 1.PNG
    1.PNG
    49.7 KB · Đọc: 8
  • 2.PNG
    2.PNG
    88.3 KB · Đọc: 8
Upvote 0
Vẫn bị lỗi như trên. Không biết có phải do Office không? Mình đang sử dụng Office 2021
Khả năng có thể do đường dẫn mà bạn điền ở ô B1 không tồn tại.
Để kiểm tra bạn có thể thay dòng:
Mã:
Set folder = fso.GetFolder(FolderPath)
bằng code sau:
PHP:
    ' Khoi tao FileSystemObject   
    Set fso = CreateObject("Scripting.FileSystemObject")   
        
    ' Kiem tra xem thu muc co ton tai khong   
    If fso.FolderExists(FolderPath) Then   
        Set folder = fso.GetFolder(FolderPath)   
    Else   
        MsgBox "Thu muc khong ton tai. Vui long kiem tra lai duong dan.", vbExclamation   
        Exit Sub   
    End If
 
Upvote 0
Khả năng có thể do đường dẫn mà bạn điền ở ô B1 không tồn tại.
Để kiểm tra bạn có thể thay dòng:
Mã:
Set folder = fso.GetFolder(FolderPath)
bằng code sau:
PHP:
    ' Khoi tao FileSystemObject  
    Set fso = CreateObject("Scripting.FileSystemObject")  
       
    ' Kiem tra xem thu muc co ton tai khong  
    If fso.FolderExists(FolderPath) Then  
        Set folder = fso.GetFolder(FolderPath)  
    Else  
        MsgBox "Thu muc khong ton tai. Vui long kiem tra lai duong dan.", vbExclamation  
        Exit Sub  
    End If

Cảm ơn Anh rất nhiều!!!
 
Upvote 0
Web KT

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

Back
Top Bottom