mở word có mailings bằng code VBA

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

Thanhhoai00

Thành viên chính thức
Tham gia
19/7/20
Bài viết
58
Được thích
13
Chào các bạn GPE, mình có đoạn code sau để mở file word mailings và xuất file word mailings đó ra file pdf bằng VBA, nhưng khi áp dụng vào bài của mình thì bị lỗi không mở lên được
Mình không biết sửa thế nào,các bạn xem giúp và sửa giúp mình nhé, làm sao để mở file word mailngs sau đó xuất ra file pdf mailings bằng code VBA !, mình cảm ơn các bạn nhiều ạ !
Mã:
Private Sub CommandButton1_Click()
Dim word_app As Object, doc As Object, link As Variant
    Set word_app = CreateObject("Word.Application")
 
    With word_app
        .Visible = True
        link = "E:\stt.docx"
        Set doc = .documents.Open(link)
    End With
    doc.MailMerge.OpenDataSource Name:="E:\Data.xlsm", SQLStatement:="SELECT * FROM `Word$`"


End Sub
 

File đính kèm

  • Data.xlsx
    9 KB · Đọc: 7
  • stt.docx
    12.5 KB · Đọc: 6
  • lỏi.png
    lỏi.png
    14.8 KB · Đọc: 15
  • loi2.png
    loi2.png
    34.3 KB · Đọc: 15
  • maling.png
    maling.png
    40.3 KB · Đọc: 15
Lần chỉnh sửa cuối:
Bạn thử code này xem
Rich (BB code):
Private Sub CommandButton1_Click()
  Dim wordApp As Object
  Dim doc As Object
  Dim link As String

  Set wordApp = CreateObject("Word.Application")

  With wordApp
    .Visible = True
    link = "E:\stt.docx"
    Set doc = .Documents.Open(link)
  End With

  doc.MailMerge.MainDocumentType = wdFormLetters
  doc.MailMerge.OpenDataSource Name:="E:\Data.xlsm", _
    LinkToSource:=True, _
    Connection:="Data Source=E:\Data.xlsm;Mode=Read", _
    SQLStatement:="SELECT * FROM `Word$`"

  doc.MailMerge.Execute
End Sub
 
Upvote 0
vẫn lỗi không mở được bạn ah ??
Bạn thử code này xem
Rich (BB code):
Private Sub CommandButton1_Click()
  Dim wordApp As Object
  Dim doc As Object
  Dim link As String

  Set wordApp = CreateObject("Word.Application")

  With wordApp
    .Visible = True
    link = "E:\stt.docx"
    Set doc = .Documents.Open(link)
  End With

  doc.MailMerge.MainDocumentType = wdFormLetters
  doc.MailMerge.OpenDataSource Name:="E:\Data.xlsm", _
    LinkToSource:=True, _
    Connection:="Data Source=E:\Data.xlsm;Mode=Read", _
    SQLStatement:="SELECT * FROM `Word$`"

  doc.MailMerge.Execute
End Sub
 

File đính kèm

  • loik.png
    loik.png
    29.3 KB · Đọc: 6
  • loik2.png
    loik2.png
    224.7 KB · Đọc: 6
Upvote 0
Chào các bạn GPE, mình có đoạn code sau để mở file word mailings và xuất file word mailings đó ra file pdf bằng VBA, nhưng khi áp dụng vào bài của mình thì bị lỗi không mở lên được
Mình không biết sửa thế nào,các bạn xem giúp và sửa giúp mình nhé, làm sao để mở file word mailngs sau đó xuất ra file pdf mailings bằng code VBA !, mình cảm ơn các bạn nhiều ạ !
Mã:
Private Sub CommandButton1_Click()
Dim word_app As Object, doc As Object, link As Variant
    Set word_app = CreateObject("Word.Application")
 
    With word_app
        .Visible = True
        link = "E:\stt.docx"
        Set doc = .documents.Open(link)
    End With
    doc.MailMerge.OpenDataSource Name:="E:\Data.xlsm", SQLStatement:="SELECT * FROM `Word$`"


End Sub
Xem lại, có thể mấy cái dấu nháy đơn bị sai kìa. Đúng là ' chứ không phải là `
 
Upvote 0
Lòng vòng xoắn xít quá mình à.

1676522042421.png

Bài #1 hỏi code VBA trong Excel thì không thấy file chạy code đâu, chỉ có mỗi file Data.xlsx.
Nhưng khổ nỗi code đòi mở Data.xlsm, tập tin stt.docx cũng không có liên kết với Data.xlsx

Rồi tới bài "vẫn lỗi" thì lại có Data.xlsm.

1676522194000.png

Mọi thứ rất đơn giản, chỉ vì cái tội không hiểu về Mail Merge căn bản nên cứ xoắn xít chóng mặt.
Nếu đã mở tập tin Excel liên kết trước rồi thì chỉ cần mở tập tin Word lên là xong, không phải mở tập tin Excel lên nữa.
Nếu chạy code VBA Excel ở 1 tập tin A, tập tin Word liên kết tập tin Excel B thì code VBA Excel lúc đó mới cần phải mở tập tin B lên.

Túm váy, túm quần lại như thế này này:
Tập tin stt.docx
Tập tin Data.xlsm chứa code VBA, chứa dữ liệu để tập tin stt.docx chạy Mail Merge thì code ở bài #1 xóa dòng này đi là xong phim ba bốn con heo con chạy lon ton.

Mã:
doc.MailMerge.OpenDataSource Name:="E:\Data.xlsm", SQLStatement:="SELECT * FROM `Word$`"
 
Upvote 0
vẫn bị lỗi bạn ah, bạn xem giúp mình nhé
Mày mò mãi rồi cũng biết. Lỗi ở đây: Câu "SELECT * FROM `Word$`"
1. Ở bài #4 tôi nói dấu nháy ' đúng nhưng không phải. Dấu nháy ` mới là dấu đúng.
2. Trong Data.xlsm của bạn thì chỉ có 1 sheet mang tên Sheet1 chứ không có sheet tên là Word.
Do đó, câu lệnh đúng phải là: "SELECT * FROM `Sheet1$`"

Bạn sửa rồi chạy lại thử xem. Tôi thử OK rồi.
 
Upvote 0
chủ đề hay quá ạ. vấn đề đã được giải quyết chưa ạ chủ thớt?
 
Upvote 0
Mày mò mãi rồi cũng biết. Lỗi ở đây: Câu "SELECT * FROM `Word$`"
1. Ở bài #4 tôi nói dấu nháy ' đúng nhưng không phải. Dấu nháy ` mới là dấu đúng.
2. Trong Data.xlsm của bạn thì chỉ có 1 sheet mang tên Sheet1 chứ không có sheet tên là Word.
Do đó, câu lệnh đúng phải là: "SELECT * FROM `Sheet1$`"

Bạn sửa rồi chạy lại thử xem. Tôi thử OK rồi.
mình chạy mở word có mailings được rồi, bạn giúp mình xíu nữa nhé
bạn code giúp mình làm sao để xuất file mailing word đó ra 1 file *.pdf để đem đi in vậy bạn ? mình sử dụng doc.printOut chỉ xuất pdf được 1 trang ???
Mình cảm ơn các bạn nhiều lắm ạ !!!

Mã:
Private Sub CommandButton1_Click()
Dim word_app As Object, doc As Object, link As Variant
    Set word_app = CreateObject("Word.Application")


 
    With word_app
        .Visible = True
        link = "E:\stt.docx"
        Set doc = .documents.Open(link)
 doc.PrintOut
 
    
    End With
    doc.MailMerge.OpenDataSource Name:="E:\Data.xlsm", SQLStatement:="SELECT * FROM `sheet1$`"

 
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
mình chạy mở word có mailings được rồi, bạn giúp mình xíu nữa nhé
bạn code giúp mình làm sao để xuất file mailing word đó ra 1 file *.pdf để đem đi in vậy bạn ? mình sử dụng doc.printOut chỉ xuất pdf được 1 trang ???
Mình cảm ơn các bạn nhiều lắm ạ !!!

Mã:
Private Sub CommandButton1_Click()
Dim word_app As Object, doc As Object, link As Variant
    Set word_app = CreateObject("Word.Application")


 
    With word_app
        .Visible = True
        link = "E:\stt.docx"
        Set doc = .documents.Open(link)
 doc.PrintOut
 
   
    End With
    doc.MailMerge.OpenDataSource Name:="E:\Data.xlsm", SQLStatement:="SELECT * FROM `sheet1$`"

 
End Sub
Thêm mấy dòng này:
Rich (BB code):
    With doc.MailMerge
        .ViewMailMergeFieldCodes = 9999998
        'Ghi toan bo (All) dòng ra file moi
        .Destination = 0        'wdSendToNewDocument
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = 1        'wdDefaultFirstRecord
            .LastRecord = -16       'wdDefaultLastRecord
        End With
        .Execute Pause:=False
    End With
    doc.Close False
    Set doc = word_app.ActiveDocument
    doc.ExportAsFixedFormat "D:\GPE_Download\stt.pdf", 17
    doc.Close False
    word_app.Documents.Open Filename:="D:\GPE_Download\stt.pdf"
    word_app.Activate
Code chuyển đến file pdf lúc này đang được mở.
 
Upvote 0
Thêm mấy dòng này:
Rich (BB code):
    With doc.MailMerge
        .ViewMailMergeFieldCodes = 9999998
        'Ghi toan bo (All) dòng ra file moi
        .Destination = 0        'wdSendToNewDocument
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = 1        'wdDefaultFirstRecord
            .LastRecord = -16       'wdDefaultLastRecord
        End With
        .Execute Pause:=False
    End With
    doc.Close False
    Set doc = word_app.ActiveDocument
    doc.ExportAsFixedFormat "D:\GPE_Download\stt.pdf", 17
    doc.Close False
    word_app.Documents.Open Filename:="D:\GPE_Download\stt.pdf"
    word_app.Activate
Code chuyển đến file pdf lúc này đang được mở.
mình làm được rồi, cảm ơn bạn nhiều nhé !
 

File đính kèm

  • stt.docx
    12.5 KB · Đọc: 5
  • Data.xlsm
    22.4 KB · Đọc: 4
  • stt.pdf
    11.5 KB · Đọc: 2
Upvote 0
Web KT

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

Back
Top Bottom