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

如何将文本从Excel发送到一个单词(单元格)为粗体的Word?,excel,vba,ms-word,Excel,Vba,Ms Word,我有一个包含28列数据的电子表格。根据哪些列具有数据,通过使用if语句创建一个句子。一旦句子被创建,它就会被发送到Word文档。当输出到Word时,其中两个单元格中的数据需要格式化,A列单元格需要加粗并加下划线,另一个单元格需要加下划线。这些单元格没有在Excel中格式化(尽管如果这样做更容易,我可以更改)。Excel只是保存数据,因为它是通过Word呈现给其他人的,为了读者的利益,它需要有格式。我知道如何将数据输出到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

一般来说,为了弄清楚这类事情,在Excel中使用宏记录器将为您提供一个基本的代码块,然后您可以对其进行清理和简化

假设您在单元格“A1”中有此文本:

你想用粗体字写“测试”。此代码是宏记录器生成的代码的稍微清理版本:

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。

为什么不拆分字符串并在不同部分之间切换格式? 这是您的代码,已调整:

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

这确实有效,但奇怪的是,除非我删除wordApp.Selection.Type,否则被登记的“&.Cells(j,“B”)&”和被服务的“…部分会导致错误。我不明白这是怎么发生的,但A中的格式化数据在输出时被预先附加到字符串中。@frankbean这是一个快速而肮脏的编辑,所以很可能我没有正确格式化它,但我也被你所描述的内容弄糊涂了,因为我认为这不应该像描述的那样有效。解释这一点需要很长时间。最终的结果是,我从一个数据库中提取了军队养老金信息,其中包括士兵姓名、服役日期、妻子姓名、结婚时间和地点等。士兵并不总是结婚,即使他们结婚了,其他数据也不总是知道。描述生活事件的句子(strLineOfText)以粗体/下划线显示士兵姓名,而妻子的姓名仅在下划线显示。这件事传给了Word。传递那个数据通常只传递原始字符,所以我在问如何传递格式。@frankbean抱歉,我写的可能会让人困惑。事实上,我从几个关键词中感觉到你在用你的程序做什么——这可能是一个我有兴趣了解更多的项目。我的意思是,你的第一条评论说,如果你从代码行中“删除
wordApp.Selection.Type
”,我的答案就行了。这个特定的描述让我想到剩下的代码会说
键入“some string”
——我认为这不应该是一个独立的行。我确信整个计划正朝着你需要的方向发展。非常清楚?谢谢你的回答,但我自己可能还不够清楚。我正在做的事情实际上很难解释。使用您上面提供的句子,我的单元格可能在A1中有值“This”,在B1中有值“test”,在C1中有值“bold face”。我构造了一个句子,并将其存储在strLineOfText中,来自A1-C1。我知道如何通过编程在Excel中嵌入格式,而不是简单地剪切和粘贴到Word。我正在将字符串strLineOfText传递给Word。strLineOfText中有1到4个格式化的单词,当我通过vba将它们传递给Word时,这些单词必须保持格式化。
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