вставка и выделение строки в коде Microsoft VBA - PullRequest
0 голосов
/ 18 февраля 2020

Вот фрагмент кода, который я создал. Сейчас это работает, но теперь мне нужно отформатировать документ. Я пытаюсь заставить третью строку в этом коде создать вывод, который выделен жирным шрифтом, но я застрял на том, как это сделать.

Фрагмент кода, который я пытаюсь отредактировать:

    ActiveDocument.Content.InsertAfter (MyArray(iRow, 7))
    ActiveDocument.Content.InsertAfter (MyArray(iRow, 8))
    ActiveDocument.Content.InsertAfter "Correct Answer is: " & (MyArray(iRow, 9))
    ActiveDocument.Content.InsertAfter (MyArray(iRow, 10))
    ActiveDocument.Content.InsertAfter (MyArray(iRow, 11))
    ActiveDocument.Content.InsertAfter (MyArray(iRow, 12))

Вот исходная настройка в коде на случай, если вам интересно, как переменные настроены:

Dim objWord
Dim ObjNewDoc As Document

Dim RowsCount As Integer
Dim ColsCount As Integer

Dim rngFormat As Range

Dim MyArray() As String

Dim iRow As Integer
Dim iCol As Integer

Я пытаюсь сделать вывод третьей строки жирным, оставляя остаток не жирным. Тем не менее, я продолжаю получать ошибки в VBA и не знаю, как их устранить.

На справочном веб-сайте Microsoft VBA говорится, что синтаксис «expression.Bold». Я попытался вставить его, и он, очевидно, создал ошибку.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Существует множество способов достижения этого - ни один из них не является «правильным» или «неправильным» (при условии, что это работает); то, что используется, является вопросом предпочтения. В любом случае лучше всего работать с одним (или несколькими) указанными c Range объектами.

Я предпочитаю работать с Range целью, а не InsertAfter, так как я чувствую, что это дает мне больше контроля. Вместо InsertAfter I Collapse объект Range до конечной точки. Подумайте об этом, как о нажатии правой стрелки, чтобы «свернуть» выделенную точку.

Это делается всякий раз, когда контент должен обрабатываться по-другому. Пока строки пишутся, все они могут быть вставлены в одну «строку кода», как в примере ниже. Когда что-то нужно сделать по-другому, Range сворачивается и обработка продолжается. Это делается каждый раз, когда что-то должно быть другим.

Sub InsertAndFormatContent
  Dim rng as Range
  Dim MyArray() As String
  Dim objNewDoc as Document

  'Populate MyArray here
  Set objNewDoc = Documents.Add()
  Set rng = objNewDoc.Content

  ' This code cannot run as MyArray is not populated!!!
  rng.Text = (MyArray(iRow, 7)) & (MyArray(iRow, 8)) & (MyArray(iRow, 9)) 
  rng.Collapse wdCollapseEnd
  rng.Text = "Correct answer is: " & (MyArray(iRow, 9))
  rng.Font.Bold = True
  rng.Collapse wdCollapseEnd
  rng.Text = (MyArray(iRow, 10)) & (MyArray(iRow,1)) & (MyArray(iRow, 12))                 
End Sub
0 голосов
/ 18 февраля 2020

Нечто подобное должно работать. При вводе текста вы создаете диапазон, который захватывает линию, которая будет выделена жирным шрифтом. Если мы выделим его жирным шрифтом при вставке текста, следующий текст также будет выделен жирным шрифтом, поэтому мы будем до конца применять форматирование:

Sub BoldOnePhrase()
    Dim oRange As Range

    ActiveDocument.Content.InsertAfter (MyArray(iRow, 7))
    ActiveDocument.Content.InsertAfter (MyArray(iRow, 8))

    Set oRange = ActiveDocument.Content
    oRange.Collapse Direction:=wdCollapseEnd
    ActiveDocument.Content.InsertAfter "Correct Answer is: " & (MyArray(iRow, 9))
    oRange.MoveEnd Unit:=wdWord, Count:=5

    ActiveDocument.Content.InsertAfter (MyArray(iRow, 10))
    ActiveDocument.Content.InsertAfter (MyArray(iRow, 11))

    oRange.Font.Bold = True
End Sub

Если ваш массив содержит ответы из нескольких слов, вы будете необходимо отрегулировать количество слов, чтобы переместить конец диапазона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...