Excel VBA применяет жирный формат к определенным символам в ячейке таблицы документов Word, не работает - PullRequest
0 голосов
/ 24 июня 2019

Я записываю данные из ячеек Excel в таблицу документов Word, используя vba, и у меня возникают проблемы с установкой части строки, выделенной жирным шрифтом в ячейке 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.

1 Ответ

0 голосов
/ 25 июня 2019

Причина ошибки понятна: Characters - это коллекция, и единственное, что вы можете передать ей, - это значение индекса для одного символа.Это не многомерный массив или метод.

Чтобы расширить диапазон или выбор, используйте один из Move методов.В этом примере MoveEnd сделает эту работу.

Существуют различные способы сделать это.Мой предпочтительный подход ниже:

  • получить Range для ячейки
  • назначить содержимое ячейке (это можно сделать за один раз, а не по частям)
  • получить начальную точку ячейки и расширить необходимое количество символов (количество символов рассчитывается по длине метки)
  • применить форматирование

У меня сложилось впечатление, что написание ярлыка + контент может потребоваться более одного раза.В таком случае это можно настроить как отдельную процедуру, которую можно вызывать при необходимости ...

Примечание. Если вы работаете с изменением позднего связывания Word.Table, Word.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
...