【问题标题】:How to send text from Excel to Word where one word (cell) is bold?如何将文本从 Excel 发送到一个单词(单元格)为粗体的 Word?
【发布时间】:2019-07-19 12:29:30
【问题描述】:

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


    【解决方案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
    

    【讨论】:

    • 这确实有效,但奇怪的是,wordApp.Selection.TypeText ", enlisted " & .Cells(j, "B") & ", served ".... 部分会导致错误,除非我删除 wordApp.Selection.Type。我不明白它是怎么发生的,但是 A 中的格式化数据在输出时被预先附加到字符串中。
    • @frankbean 那是一个快速而肮脏的编辑,所以很可能我没有正确格式化它,但我也对你所描述的内容感到困惑,因为我不认为应该按描述工作。
    • 解释这将是冗长的。最终结果是我从一个数据库中提取军事养老金信息,其中包括士兵的姓名、服役日期、妻子的姓名、结婚的时间和地点等。士兵并不总是结婚,即使他们做了其他数据并不总是为人所知。描述生活事件的句子(strLineOfText)是用粗体/下划线的士兵姓名和仅下划线的妻子姓名创建的。这将传递给 Word。传递该数据通常只传递原始字符,所以我在问如何传递格式。
    • @frankbean 抱歉,我写的内容可能令人困惑。我实际上从几个关键词中感觉到了你在用你的程序做什么——这可能是一个我有兴趣了解更多的项目。我的意思是,您的第一条评论说,如果您从代码行中“删除 wordApp.Selection.Type”,我的回答就会奏效。这个具体的描述让我认为剩下的代码会说Type "some string"——我认为它不应该能够作为一个独立的行。我确信整个程序正在满足您的需求。清如泥?
    【解决方案2】:

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

    假设您在单元格“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。

    【讨论】:

    • 感谢您的回复,但我自己可能还不够清楚。我正在做的实际上是相当复杂的解释。使用您在上面提供的句子,我的单元格可能在 A1 中具有值“This”,在 B1 中具有“测试”,在 C1 中具有“粗体”。我从 A1-C1 构造一个句子,并将其存储在 strLineOfText 中。我知道如何以编程方式在 Excel 中注入格式,而不仅仅是剪切和粘贴到 Word。我将字符串 strLineOfText 传递给 Word。 strLineOfText 中将有 1 到 4 个格式化的单词,当我通过 vba 将它们传递给 Word 时,它们必须保持格式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    相关资源
    最近更新 更多