使用Excel-VBA填充Word中的表并修改每个单元格中特定单词的颜色

问题描述 投票:0回答:2

我有一个存储了6条信息的数组,其中一条是存储条件。存在四种不同的存储条件(-80℃,RT,2-8,-20℃)。我正在迭代数组,然后填充Avery标签模板,这是一个表。我可以很好地填充标签模板,但我想更改存储条件字的字体/颜色。我无法隔离细胞的特定元素。

这是我有的:

'populating cell with array containing information
.Cell(r, c).Range.Text = arrEl(x, 0) & " "& arrEl(x, 1) & " "& arrEl(x, 2)
.Cell(r, c).Range.Text =.Cell(r,c).Range.Text + arrEl(x, 3) + " "+ arrEl(x, 4) + " "+ arrEl(x, 5)

'Changing font and style of each cell
With .Cell(r, c).Range
            .Font.Name = "Times New Roman"
            .Font.Size = 8
            Debug.Print .Paragraphs(2).Range.Words.Last 
            'I've tried .Words.Count to tell he how many words
            'I've tried .Words(1) 
        End With

我正在使用Debug.Print来定位和隔离存储条件(即arrEl(x,5)一旦它在Word中的单元格中。我遇到两个问题:

  1. .Words.Last显示单元格结尾字符¤即使最后一个单词有望读取四种存储条件之一(-80C,RT,2-8,-20C)。
  2. 当我将存储条件作为第二段中的第一个单词时,我得到了存储条件的不完整部分。例如,当我想要“-80”时只有“ - ”,或者当我想要“2-8”时只有“ - ”。

有什么建议?

excel vba ms-word word-vba
2个回答
0
投票

你说存储条件是'arrEl(x,5)'

如果是这样,您需要更改此行

.Cell(r, c).Range.Text =.Cell(r,c).Range.Text + arrEl(x, 3) + " "+ arrEl(x, 4) + " "+ arrEl(x, 5)

.Cell(r, c).Range.Text =.Cell(r,c).Range.Text & arrEl(x, 3) & " "+ arrEl(x, 4) & " "
Set my_range = .cell(r,c).range
my_range.collapse direction:=wdcollapseend
.Cell(r,c).range.text = .Cell(r,c).range.text & arrEl(x, 5)

my_range.end = .Cell(r,c).range.end

此时my_range应仅包含arrEl(x,5)中的文本,因此您现在可以将所需的字体格式应用于my_range。

您当然需要在代码中插入Dim my_range作为Word.range

编辑

为了确保我们不在该范围内包含任何单元格或段落标记的末尾,我们可以使用.MoveEndUntil方法。在范围示例中,表示愤怒结束的字符集是“CT8”。因此我们可以做到

my_range.MoveEndUntil cset:="CT8", count:=wdbackwards

0
投票

使用Word VBA,以下标识表格单元格中的文本:

ActiveDocument.Tables(1).Cell(1,1).Range.Text

您可以使用以下内容更改单元格中单词的字体特征:

ActiveDocument.Tables(1).Cell(1,1).Range.Words(2).Font.ColorIndex = 3

或者对整个文本使用以下内容:

ActiveDocument.Tables(1).Cell(1,1).Range.Font.ColorIndex = 3

如果从Excel编码,则检查您是否正在引用Word及其表(如果适用)。


如果需要,您可以使用单元格修改单元格中的文本

ActiveDocument.Tables(1).Cell(1,1).Range.Text = "foo bar"

你可以得到最后一个字

ActiveDocument.Tables(1).Cell(1,1).Range.Words( _ 
    ActiveDocument.Tables(1).Cell(1,1).Range.Words.Count - 1)

虽然这可以通过中间参考来简化。 Count - 1忽略了结束细胞标记(或任何它被称为)。

© www.soinside.com 2019 - 2024. All rights reserved.