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