2016-05-10 3 views
1

Я новичок и создаю пользовательскую форму, которая вводит данные в письмо. Есть строка, которую мне нужно выделить и подчеркнуть.Формат строки полужирный в месте закладки

With .Bookmarks("bidDate").Range.InsertBefore 
     .Text = inputBidM & " " & inputBidD & ", " & inputBidY 
     .Font.Bold = True 
     .Font.Underline = True 
    End With 

Я нашел этот http://computer-programming-forum.com/1-vba/8e9aacaf425425ad.htm, чтобы получить то, что я выше, но я получаю ошибку компиляции: Invalid или негодный ссылочный.

Любая помощь очень ценится.

Редактировать: Код для этого раздела. У меня все остальное прокомментировано.

Private Sub startButton_Click() 
' Inserting Addendum Info from fill in boxes 
With ActiveDocument 
    .Bookmarks("addenDate").Range.InsertBefore inputAddenM & " " & inputAddenD & ", " & inputAddenY 
    .Bookmarks("addenDateA").Range.InsertBefore inputAddenM & " " & inputAddenD & ", " & inputAddenY 
    .Bookmarks("contractNo").Range.InsertBefore inputContractNo 
    .Bookmarks("contractNoA").Range.InsertBefore inputContractNo 
    .Bookmarks("fapNo").Range.InsertBefore inputFAPNo 
    .Bookmarks("descrip").Range.InsertBefore inputDescrip 
    .Bookmarks("addenNo").Range.InsertBefore inputAddenNo 
    .Bookmarks("addenNoA").Range.InsertBefore inputAddenNo 
    .Bookmarks("addenNoB").Range.InsertBefore inputAddenNo 
    .Bookmarks("bidDate").Range.Text inputBidM & " " & inputBidD & ", " & inputBidY 
     .Font.Bold = True 
     .Font.Underline = True 
End With 
End Sub 
+0

На самом деле, я считаю этот подход предпочтительнее того, который вы отметили как ответ, поэтому использование объекта Range, а не Selection. Единственная проблема с вашим кодом заключается в том, что вам не нужно '.InsertBefore'. Удалите это, и он должен работать. Причиной работы с диапазоном является предпочтительная работа с выбором: 1) экран остается тихим; 2) выполнение выполняется быстрее; 3) Вам лучше контролировать, где/что происходит в коде; 4) Вы можете работать с несколькими диапазонами, но может быть только один выбор. –

+0

Я пробовал это, и он не работает. Однако я мог что-то пропустить. –

+0

Поскольку вы не показываете нам целый макрос И вы не описываете «КАК», это не работает, что не позволяет легко справиться с проблемой. Но если это все, что находится в вашем макросе, вам нужно использовать 'ActiveDocument' перед' .Bookmarks'. Возможно, вы захотите использовать ссылку [edit], чтобы поместить полный макрос (включая 'Sub' и' End Sub') в ваш вопрос ... –

ответ

0

Ключевое слово With позволяет выполнять несколько действий над объектом без необходимости вводить объект для каждой строки. Код, который вы показываете может быть записан без With и End With путем размещения ActiveDocument перед каждым .Bookmarks линии. Вы можете видеть, как это экономит время ввода, и его легче читать :-)

Поскольку вы хотите сделать больше с последней закладкой, чем просто вставить текст, вы можете добавить (гнездо) еще один With...End With, чтобы вы могли работать с что Range, что-то вроде этого:

Private Sub startButton_Click() 
    ' Inserting Addendum Info from fill in boxes 
    With ActiveDocument 
    .Bookmarks("addenDate").Range.InsertBefore inputAddenM & " " & inputAddenD & ", " & inputAddenY 
    .Bookmarks("addenDateA").Range.InsertBefore inputAddenM & " " & inputAddenD & ", " & inputAddenY 
    .Bookmarks("contractNo").Range.InsertBefore inputContractNo 
    .Bookmarks("contractNoA").Range.InsertBefore inputContractNo 
    .Bookmarks("fapNo").Range.InsertBefore inputFAPNo 
    .Bookmarks("descrip").Range.InsertBefore inputDescrip 
    .Bookmarks("addenNo").Range.InsertBefore inputAddenNo 
    .Bookmarks("addenNoA").Range.InsertBefore inputAddenNo 
    .Bookmarks("addenNoB").Range.InsertBefore inputAddenNo 
    With .Bookmarks("bidDate").Range 
     .Text = inputBidM & " " & inputBidD & ", " & inputBidY 
     .Font.Bold = True 
     .Font.Underline = True 
    End With 
    End With 
End Sub 
+0

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

+0

В чем разница между '.Text' и' .InsertBefore'/'.InsertAfter'? –

+0

'.Text' заменит все, что находится в' Range' (или 'Selection'); подумайте, что он как-то подбирает, а затем набирает клавиатуру. ('Selection.TypeText' будет делать то же самое, если выделение содержит текст вместо мигающего курсора). Две команды «Вставить» помещают новый текст перед/после заданного диапазона или выбора. Подумайте об этом, как сначала нажимая левую или правую стрелку, затем набрав так, чтобы все было сохранено. Поэтому, если ваш закладок [заключенный в скобки] текст заполнителя в документе с использованием '.Text' удалит placeholder; методы «Вставить» оставят местозаполнитель. –

0

Следующая работа делает:

Sub test() 

    With Selection 
     .GoTo What:=wdGoToBookmark, Name:="bidDate" 
     .Text = "blah blah blah" 
     .Font.Bold = True 
     .Font.Underline = True 
    End With 

End Sub 

двоеточие перед тем .Bookmarks возможна только при использовании другой With заявление. Вот почему вы получаете сообщение об ошибке.

+0

Спасибо! Это работает. –

Смежные вопросы