问题描述
我不是一个编码员,但是我在网上找到了一个源代码外壳,并且一直在进行调整,尽管还没有完全了解它在做什么,但现在我终于遇到了问题。我没有丝毫线索如何格式化复制的值。我敢肯定,这是一种更干净的方法,如果我有可能复制它以得到自己想要的东西,我全都听着!
我想从Excel电子表格中提取某些单元格,然后将它们放入经过特殊样式设置和格式化的表格中。
Option Explicit
Const FilePath As String = "C:\Users\nicho\Final2\"
Dim wd As New Word.Application
Sub ExportButton()
Dim doc As Word.Document
wd.Visible = True
Dim J As String
Dim C As String
Dim F As String
Dim G As String
Dim E As String
Dim D As String
J = ThisWorkbook.Sheets(1).Range("J2").Value 'value from sheet1
C = ThisWorkbook.Sheets(1).Range("C2").Value
F = ThisWorkbook.Sheets(1).Range("F2").Value
G = ThisWorkbook.Sheets(1).Range("G2").Value
E = ThisWorkbook.Sheets(1).Range("E2").Value
D = ThisWorkbook.Sheets(1).Range("D2").Value
Set doc = wd.Documents.Open(FilePath & "output.docx")
copy2word "JField",J
copy2word "CField",C
copy2word "FField",F
copy2word "GField",G
copy2word "EField",E
copy2word "DField",D
doc.Close
wd.Quit
'MsgBox "Created files in " & FilePath & "!"
End Sub
Sub copy2word(BookMarkName As String,Text2Type As String)
'copy each cell to relevant Word bookmark
wd.Selection.GoTo What:=wdGoToBookmark,Name:=BookMarkName
wd.Selection.TypeText Text2Type
End Sub
很抱歉,如果这是一个愚蠢的问题,我已经搜索过,但还没有找到使用我正在使用的代码的解决方案。
解决方法
在VBA中(无论是Excel还是Word)工作时,始终建议避免使用Selection
对象。因此,您的Copy2Word例程可以如下重写。这将允许您添加所需的任何格式。您可以通过在Word中记录宏来获取该格式的基本代码。尽管宏记录器将使用Selection
对象,但您会发现Range
可以使用相同的对象。您还可以使用对象浏览器和Intellisense来检查代码是否有效。
当然,如果已使用样式对加书签的位置进行了正确的格式化,则无需应用任何格式。
Sub Copy2word(targetDoc As Word.Document,BookMarkName As String,Text2Type As String)
If targetDoc.Bookmarks.Exists(BookMarkName) Then
With targetDoc.Bookmarks(BookMarkName).Range
.text = Text2Type
'add formatting code here
End With
End If
End Sub