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

时间:2019-03-21 15:41:37

标签: excel vba ms-word word-vba

我有一个存储了6条信息的数组,其中之一是存储条件。有四种不同的存储条件(-80C,RT,2-8,-20C)。我要遍历数组,然后填充一个Avery Label模板,它是一个表。我可以很好地填充标签模板,但是我想更改存储条件字的字体/颜色。我在隔离单元的特定元素时遇到了麻烦。

这是我所拥有的:

'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”时,只有“ 2”。

有什么建议吗?

2 个答案:

答案 0 :(得分: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忽略了结束单元格标记(或任何被称为的单元格标记)。

答案 1 :(得分: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