Mail Merge 去 Outlook 的 VBA , 用 Excel 定 Word 寫會好D?

本帖最後由 黑道明 於 2019-10-29 10:38 編輯

有的東西
1. Excel , 入面有5項資料 3項去 Word , 包括 名 , 公司 , 職位 , 2項去 Outlook 包括 Email , CC Email
2. Word , 入面有3項資料由Excel , 包括 名 , 公司 , 職位
3. 附件 , 當中包括 1個所有人都要既 .pdf , 同一個 個別 既 .pdf

之前既做法
1. Outlook Set Offline
2. 開 Word , Mail Merge 曬 名 , 公司 , 職位 , Email , CC Email
3. 係Outlook , 每一個Email Copy CC Email 上Outlook CC個位
4. 係Outlook , 手動加返 所有附件上去.
5. Outlook Set Online , Send 出去

見到咁多相同既動作 , 想用VBA搞掂佢.
想試下錄一個 Macro 再改.

問題有幾個.
1. 用Excel 定 Word 黎錄個 Macro?
2. 我想由第二個 Excel 或 Word 做 Macro file , 唔想搞到兩個原檔.( 更唔想比唔識VBA既同樹搞到 )
3. 點錄? 可以錄到 Outlook Copy CC Email 同上附件? 成個程序錄曬 ?

睇過C兄之前條參考片......
03 用OUTLOOK郵件MIAL與VBA說明
https://www.youtube.com/watch?v=eRDTKVAArI0
如果跟佢 , 點Call 個 Word 出黎??

本帖最後由 d-snake 於 2019-10-30 15:24 編輯

唔用mail merge,限制太多。寫左幾句,你可以跟住試下:

A.
喺Word,整個addin 放code:
1.開個吉doc
2.加一個Module,paste 呢段上去
  1. Sub Go(var)
  2.     With Selection.Find
  3.         .Text = "%companyName%"
  4.         .Replacement.Text = var
  5.         .Execute Replace:=wdReplaceAll
  6.     End With
  7. End Sub
複製代碼
3.Save As "Word Macro-Enabled Template",儲存為C:\temp\doc.dotm。
4.關閉Word。

B.
1.再開個吉doc,整個email template。亂打啲野上去,再打入%companyName%
2.Save 去C:\temp\doc1.docx
3.關閉Word。

C.
開個吉Excel,入以下資料,save去C:\temp\Book1.xlsx。關閉Excel。
EXCEL_2019-10-30_14-21-13.png
2019-10-30 14:23


D.
喺Outlook:
1. Outlook > Developer > Visual Basic
2. Tools > Reference > tick Microsoft Word 16.0 Object Library 和 Microsoft Excel 16.0 Object Library
3. 加個新Modules,paste 呢段code 上去
  1. Sub main()
  2.    Dim oEx As Excel.Application
  3.    Dim oWB As Workbook, oWS As Worksheet, row, companyName, email, doc
  4.    Dim wdMacroTemplate, docTemplate
  5.    
  6.    wdMacroTemplate = "C:\temp\doc.dotm" 'blank content, contains word related code
  7.    docTemplate = "C:\temp\doc1.docx" 'email template, contains no code
  8.    
  9.    Set oEx = CreateObject("Excel.Application")
  10.    Set oWB = oEx.WorkBooks.Open("C:\temp\Book1.xlsx")
  11.    oEx.Visible = True 'for debug
  12.      
  13.    Set oWS = oWB.Sheets("Sheet1")

  14.    row = 2
  15.    'Do Until oWS.Range("A" & row) = ""
  16.       companyName = oWS.Range("A" & row)
  17.       email = oWS.Range("B" & row)
  18.       doc = "C:\temp" & companyName & ".docx"
  19.       prepareWordFile wdMacroTemplate, docTemplate, companyName, doc
  20.       sendEmail email, doc
  21.       'row = row + 1
  22.    'Loop

  23.    oWB.Close 'SaveChanges:=True
  24.    oEx.Quit
  25.    Set oWB = Nothing
  26.    Set oEx = Nothing
  27. End Sub

  28. Sub prepareWordFile(wdMacroTemplate, docTemplate, companyName, fileOut)
  29.     Dim oWd As Word.Application
  30.     Dim oDoc, wTemplate
  31.     Set oWd = CreateObject("Word.Application")
  32.     oWd.Visible = True 'for debug
  33.     oWd.AddIns.Add FileName:=wdMacroTemplate, Install:=True
  34.     oDoc = oWd.Documents.Open(docTemplate)
  35.     oWd.Run "Go", companyName
  36.     oWd.ActiveDocument.SaveAs FileName:=fileOut, fileformat:=wdFormatDocumentDefault
  37.     oWd.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
  38.     oWd.AddIns(wdMacroTemplate).Delete
  39.     oWd.Quit
  40.     Set oWd = Nothing
  41. End Sub

  42. Sub sendEmail(emailTo, doc)
  43.     'create outlook mailitem then send
  44. End Sub
複製代碼
直接Run "main",流程係Outlook > 讀Excel 資料 > 建立各公司文件 > 建立email

TOP

唔用mail merge,限制太多。寫左幾句,你可以跟住試下:

A.
喺Word,整個addin 放code:
1.開個吉doc
2.加一 ...
d-snake 發表於 2019-10-30 14:42



唔該.....竟然係..........outlook寫VBA.........
真係估唔到.....

睇到第22行仲理解到

聽日返去試下
有咩唔明 , 過幾日再問

TOP

留名學野,太實用了

TOP