vb 变量赋值为当前选定单元格_第7篇:根据Excel选定行对Word模板填充数据(补充修改)...
生活随笔
收集整理的這篇文章主要介紹了
vb 变量赋值为当前选定单元格_第7篇:根据Excel选定行对Word模板填充数据(补充修改)...
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題外:由于漏掉了勾選Microsoft?Word?16.0?Object?Library這個關鍵步驟(不勾選是無法導出的),故修改后再次發(fā)出。本期我是從知乎上的郭大牛老師那里學的,非常建議大家去閱讀,這里真的拜謝郭大牛老師。https://zhuanlan.zhihu.com/p/76755973?utm_source=wechat_session&utm_medium=social&utm_oi=842149456383193088郭大牛:根據Excel數據生成Word文檔雖然代碼可能有一點難,但由于實在是太便利,覺得還是應該拿出來,哪怕簡化后的,也是有作用的,主要還是要盡力嘗試。開始正題。先看視頻。本次只是針對Excel單行數據的單次Word文檔填充,邏輯關系上是比較簡單的。如果再往下想,循環(huán)填充多行,批量形成多個Word文檔也是可以的,這個就以后再說了。這一次由于關聯到Word,我們要先按如下順序操作:Excel開發(fā)工具欄→VB編輯器→工具→引用→找到Microsoft Word?16.0?Object Library并打鉤→確定。這樣我們才能關聯到Word,實質相當于一個Excel和Word之間的接口。思路是這樣的:定義變量→變量賦值→窗口選擇Word模板文件→打開Word模板文件→替換內容→另存替換后的Word文件一、定義變量Dim StarGun As ObjectDim WordD As ObjectDim PathW As StringDim Tit, TheDate, SP, AP As StringDim a As Integer這里先把StarGun和WordD定義為對象,PathW、Tit、TheDate、SP、AP定義為字符串型變量,a定義為整數。二、賦值 a = ActiveCell.Row Tit = Cells(a, 2) TheDate = Format(Cells(a, 1), "mm月dd日") SP = Format(Cells(a, 5), "#0.00") AP = Format(Cells(a, 11), "#0.00") Level = Cells(a, 12) & "級"ActiveCell.Row即取值當前選擇的單元格的行號,然后把想要替換的單元格的內容賦值于剩下的5個變量內。如果想要替換更多的單元格內容,就要賦值更多的變量。Format用于調整對象格式。三、窗口選擇Word模板文件With Application.FileDialog(msoFileDialogFilePicker) .Filters.Add "word文件", "*.doc*", 1 .InitialFileName = "C:\Users\Dick\Desktop\vba撰寫\" .AllowMultiSelect = False If .Show Then PathW = .SelectedItems(1) Else Exit Sub End With以上可以解讀為:在指定路徑下(.InitialFileName = "C:\Users\Dick\Desktop\vba撰寫\"),選擇文件名含有".doc"的Word文檔,只能選擇一個Word文檔;如果沒有選擇文件則直接退出本次命令執(zhí)行。四、打開Word模板文件 Set StarGun = CreateObject("Word.Application") StarGun.Visible = True Set WordD = StarGun.Documents.Open(PathW, , False)這一段三句功能為打開第三步選擇的Word模板文件,其中StarGun.Visible意義在于使這個Word文件打開時處于可見狀態(tài),如果為False則是不可見,其它句子就不必糾結了。五、替換內容
本例代碼中這一部分雖然比較長,但是基本都是一個個點對點的替換動作,這里只取其一做解釋。
With StarGun.Application.Selection .Find.ClearFormatting .Find.Replacement.ClearFormatting With .Find .Text = "{$監(jiān)測點名稱}" .Replacement.Text = Tit End With .Find.Execute Replace:=wdReplaceAll End With以此為例,主要意思就是把已打開的Word模板中的{$監(jiān)測點名稱},替換為變量Tit(Tit已經賦值)。.Find.Execute Replace:=wdReplaceAll是Word的VBA命令,意思為替換所有內容,每一個變量替換都要帶這一句,缺少了會報錯。如果需要增減修改替換的變量,復制With .Find至wdReplaceAll,修改賦給Text的內容即可。六、另存替換后的Word文件 WordD.SaveAs ThisWorkbook.Path & "\" & "監(jiān)測點數據Word" & "(" & Tit & ")" & ".doc"關于Save as在第二篇宏錄制里有解釋,這里就不再贅述了。附上完整代碼Sub 按鈕8_Click()Dim StarGun As Object 'Word.ApplicationDim WordD As Object 'Word.DocumentDim PathW As String '模板文件路徑名Dim Tit, TheDate, SP, AP As StringDim a As Integer a = ActiveCell.Row Tit = Cells(a, 2) TheDate = Format(Cells(a, 1), "mm月dd日") SP = Format(Cells(a, 5), "#0.00") AP = Format(Cells(a, 11), "#0.00") Level = Cells(a, 12) & "級" With Application.FileDialog(msoFileDialogFilePicker) '窗口打開Word文件并不選時報錯 .Filters.Add "word文件", "*.doc*", 1 .InitialFileName = "C:\Users\Dick\Desktop\vba撰寫\" .AllowMultiSelect = False If .Show Then PathW = .SelectedItems(1) Else Exit Sub End With Set StarGun = CreateObject("Word.Application") '打開模板文件 StarGun.Visible = True Set WordD = StarGun.Documents.Open(PathW, , False) With StarGun.Application.Selection '開始替換 .Find.ClearFormatting 'ClearFormatting為清除目標位置現有格式,如加粗底色等,為后面僅作字符替換做準備 .Find.Replacement.ClearFormatting With .Find .Text = "{$監(jiān)測點名稱}" .Replacement.Text = Tit End With .Find.Execute Replace:=wdReplaceAll 'wdReplaceAll是Word的VBA命令,替換所有內容 With .Find .Text = "{$監(jiān)測時間}" .Replacement.Text = TheDate End With .Find.Execute Replace:=wdReplaceAll With .Find .Text = "{$S指數}" .Replacement.Text = SP End With .Find.Execute Replace:=wdReplaceAll With .Find .Text = "{$A指數}" .Replacement.Text = AP End With .Find.Execute Replace:=wdReplaceAll With .Find .Text = "{$風險等級}" .Replacement.Text = Level End With .Find.Execute Replace:=wdReplaceAll End With WordD.SaveAs ThisWorkbook.Path & "\" & "監(jiān)測點數據Word" & "(" & Tit & ")" & ".doc"End Sub這套程序是我在4月份時開始使用的(我用的不太一樣,文中簡化了很多),當時真挺難,幾乎是每一句都讀不懂,只是看出了能增減修改變量的位置,于是不明就里的就開始使用了。因此,看不看得懂可能還真不是十分重要,反正能用就行了,別的以后再說。附件在閱讀全文,碼【gefv】? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 完
總結
以上是生活随笔為你收集整理的vb 变量赋值为当前选定单元格_第7篇:根据Excel选定行对Word模板填充数据(补充修改)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python删除文件一行数据、不使用临时
- 下一篇: python选出奇数并降序_奇数结点升序