我有一个包含28列数据的电子表格。根据使用数据的列,使用if语句创建一个句子。创建句子后,它将发送到Word文档。当将两个单元格中的数据输出到Word时,需要对它们进行格式化,将A列单元格中的数据加粗并加下划线,而其他单元格则要简单地加下划线。这些单元格未在Excel中格式化(尽管如果可以更轻松地进行更改)。 Excel只是保留数据,因为它是通过Word呈现给其他人的,因此需要格式化以使读者受益。我知道如何将数据输出到Word,但是由于这是我第一次这样做,所以我不知道如何传递格式。我在想也许通过选择性粘贴,但我又不知道该怎么做。以下是我代码的适用部分。
一个名为strLineofText的字符串由单元格中的数据组成。将单元格A和单元格I添加到字符串时,需要使用单元格A数据加粗和下划线来格式化它们。我仅包括下面适用于单元格A的部分。
Const strSHEET_NAME = "Sheet1"
Dim strLineOfText As String
Dim blnNewApp As Boolean
Dim wordApp As Object
Dim wordDoc As Object
Dim j As Long
On Error Resume Next
Set wordApp = GetObject(, "Word.Application")
On Error GoTo ErrorHandler
If wordApp Is Nothing Then
Set wordApp = CreateObject("Word.Application")
blnNewApp = True
End If
Set wordDoc = wordApp.Documents.Add()
With ThisWorkbook.Sheets(strSHEET_NAME)
For j = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row
strLineOfText = .Cells(j, "A").Text & ", enlisted " & .Cells(j, "B") & ", served " & .Cells(j, "C") & ", " & .Cells(j, "D") & ", " & .Cells(j, "E")
wordApp.Selection.TypeText strLineOfText
wordApp.Selection.TypeParagraph
Next j
End With
wordApp.Visible = True
AppActivate wordApp.Caption
答案 0 :(得分:1)
通常,为了弄清楚这样的事情,在Excel中使用Macro Recorder将为您提供基本的代码块,然后您可以对其进行清理和简化。
假设您在“ A1”单元格中有以下文字:
This is a test of bold face.
,并且您想以黑体字突出显示“测试”一词。这段代码是由宏记录器生成的代码的稍作清理的版本:
With Range("A1").Characters(Start:=11, Length:=4).Font
.Name = "Calibri"
.FontStyle = "Bold"
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor
End With
实际上,您可以忽略除“ .FontStyle = Bold”选项之外的所有内容,但我想将其包括在内,以便您可以看到使用此技术几乎可以控制文本格式的任何属性。
一旦设置了文本格式,就可以轻松地将其剪切并粘贴到Word。
答案 1 :(得分:1)
为什么不分解字符串并在各部分之间切换格式? 这是经过调整的代码:
With ThisWorkbook.Sheets(strSHEET_NAME)
For j = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row
wordApp.Selection.Font.Bold = True
wordApp.Selection.Font.Underline = True
wordApp.Selection.TypeText .Cells(j, "A").Text
wordApp.Selection.Font.Bold = False
wordApp.Selection.Font.Underline = False
wordApp.Selection.TypeText ", enlisted " & .Cells(j, "B") & ", served " & .Cells(j, "C") & ", " & .Cells(j, "D") & ", " & .Cells(j, "E")
Next j
End With