【问题标题】:Excel VBA applying bold format to certain characters in a Word doc table cell not workingExcel VBA将粗体格式应用于Word文档表格单元格中的某些字符不起作用
【发布时间】:2019-06-24 15:11:35
【问题描述】:

我正在使用 vba 将 Excel 单元格中的数据写入 Word 文档表,并且在 Word 单元格中将部分字符串设置为粗体时遇到问题。

                        objTable.cell(2, 1).Range.Text = "Answer: "
                        objTable.cell(2, 1).Characters(1, 7).Bold = True
                        objTable.cell(2, 1).Range.InsertAfter 
    Text:=ws.Cells(row, ANSWER_COLUMN) * 100 & "%"

当我有两个参数时,我在选择字符时遇到错误。但是,当我有 1 个参数时,它可以工作,但只会将该单个字符设置为粗体。我需要将整个“答案:”标签加粗,然后将其后面的文本加粗。再一次,我选择的表格是一个简单的 Word 表格。

【问题讨论】:

    标签: excel vba ms-word format character


    【解决方案1】:

    错误的原因很清楚:Characters 是一个集合,您唯一可以传递给它的是单个字符的索引值。它不是多维数组或方法。

    为了扩展范围或选择,请使用Move 方法之一。对于这个例子,MoveEnd 可以完成这项工作。

    有多种方法可以做到这一点。我的首选方法如下:

    • 为单元格获取Range
    • 将内容分配给单元格(可以一次性完成,而不是零碎完成)
    • 获取单元格的起点,并扩展需要的字符数(字符数由标签长度计算)
    • 应用格式

    我得到印象写作标签 + 内容可能需要不止一次。如果是这样的话,这可以设置为一个单独的过程,可以在需要时调用......

    注意:如果您正在处理后期绑定,请将声明中的 Word.TableWord.Range 等更改为 Object

    Sub TestWriteToCell()
        Dim objTable As Word.Table
        'Change this to what you're using to pick up the table - 
        'You didn't provide this part of the code, so I had to "make do"
        Set objTable = ActiveDocument.Tables(1)
        Dim rngCell As Word.Range
        Dim sCellContent As String
        Dim sLabel As String
    
        sLabel = "Answer:"
        sCellContent = sLabel & " " & ws.Cells(Row, ANSWER_COLUMN) * 100 & "%"
        Set rngCell = objTable.Cell(2, 1).Range
        WriteToCellWithFormatting(rngCell, sLabel, sCellContent)
    End Sub
    
    Sub WriteToCellWithFormatting(rngCell As Word.Range, sLabel As String, sCellContent As String)
        Dim lBoldLength As Long
    
        lBoldLength = Len(sLabel)
        rngCell.Text = sCellContent
        'At this point rngCell contains the entire cell content
        'So get to the starting point...
        rngCell.Collapse wdCollapseStart
        '...then extend the required number of characters
        rngCell.MoveEnd wdCharacter, lBoldLength
        rngCell.Bold = True
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 2016-06-18
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      相关资源
      最近更新 更多