表中的VBA Word下标

时间:2018-08-09 11:54:41

标签: vba ms-word

我正在尝试使用VBA在Word文档的表格单元格中添加文本作为下标。 我目前有这段代码,这是将值插入表中的循环的一部分。

ActiveDocument.Tables(ActiveDocument.Tables.Count).Cell(i, j).Range.Font.Subscript = False

wordArray = Split(ws.Cells(i, j), "_")

For k = LBound(wordArray) To UBound(wordArray)        

    ActiveDocument.Tables(ActiveDocument.Tables.Count).Cell(i, j).Range.InsertAfter wordArray(k)
    ActiveDocument.Tables(ActiveDocument.Tables.Count).Cell(i, j).Range.Font.Subscript = wdToggle

Next k

所以我在“ _”上拆分了ws.Cells(i,j)中的文本 这可以成为长度为1,2或3的数组 只有数组的第二个元素必须是下标。 我的当前代码应该执行此操作,但是,它将根据Font.Subscript的最后一个值(即完全正常还是完全下标)将值写入单元格。

所以我在表格单元格中真正想要的是以下内容 如果ws.Cells具有例如a_b_c,则b应该是下标,而a和c通常写在表单元格中。我该如何更改我的代码来实现这一目标?

1 个答案:

答案 0 :(得分:0)

由于您没有提供,因此您需要使以下示例适应您的需要-。它的主要目的是演示如何在For循环中完成文本的插入和格式设置。

请注意如何声明和实例化Table对象-比重复ActiveDocument.Tables[index]更可靠,更有效。

使用Range对象将数据写入表单元格。重要的是“折叠”范围,以便附加内容,而不是覆盖内容。您需要为每个格式版本编写一个单独的范围对象。

下面的代码检查是否正在写入数组的第二个成员。如果是,则将其格式设置为下标,如果它是另一个成员,则不设置下标。

Sub CellContentWithSubscript()
    Dim tbl As Word.Table
    Dim rng As Word.Range
    Dim wordArray  '() As Variant
    Dim data As String, k As Long

    Set tbl = ActiveDocument.Tables(1)  
    data = "PartOne_Part two_Part three"
    wordArray = Split(data, "_")
    Set rng = tbl.Cell(1, 1).Range
    rng.Collapse 0
    rng.MoveEnd wdCharacter, -1

    For k = LBound(wordArray) To UBound(wordArray)
        rng.Text = wordArray(k)
        If k = 1 Then
            rng.Font.Subscript = True
        Else
            rng.Font.Subscript = False
        End If
        rng.Collapse 0
    Next k
End Sub