如何将Excel中的文本发送到一个单词(单元格)为粗体的Word?

时间:2019-07-19 12:29:30

标签: excel vba ms-word

我有一个包含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

2 个答案:

答案 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