Использование Excel-VBA для заполнения таблицы в Word и изменения цвета конкретного слова в каждой ячейке - PullRequest
0 голосов
/ 21 марта 2019

У меня есть массив, в котором хранится 6 частей информации, одна из которых - условия хранения. Существует четыре различных условия хранения (-80C, RT, 2-8, -20C). Я перебираю массив, а затем заполняю шаблон метки 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», когда я хотел бы иметь «2-8».

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Вы говорите, что условие хранения в '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 голосов
/ 21 марта 2019

В 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 игнорирует маркер конечной ячейки (или как он там называется).

...