VBA:将Excel中的特定单元格复制到Word上的表中并格式化输出

问题描述

我不是一个编码员,但是我在网上找到了一个代码外壳,并且一直在进行调整,尽管还没有完全了解它在做什么,但现在我终于遇到了问题。我没有丝毫线索如何格式化复制的值。我敢肯定,这是一种更干净的方法,如果我有可能复制它以得到自己想要的东西,我全都听着!

我想从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