2016-10-17 11 views
0

Я использую этот код, который специально помещает текст в точной камере я хочу, используя этот код:MS WORD 2010 Использование VBA для ввода текста в ячейку таблицы переформатировать и введите дополнительный текст без удаления предыдущего текста

Dim myText1 As String 
    Dim myText2 As String 
    myText1 = "Header" 
    myText2 = "Body" 

    With ActiveDocument.Tables(1).Cell(2, 2).Range 

    .Font.Name = "Times New Roman" 
    .Font.Size = 12 
    .Font.Bold = True 
    .Font.Underline = True 
    .Text = myText1 & vbCr & vbCr & myText2 
End With 

Проблема, с которой я столкнулась, - это «myText2» не должна быть подчеркнута или выделена жирным шрифтом.

Я попытался это:

Dim myText1 As String 
    Dim myText2 As String 
    myText1 = "Header" 
    myText2 = "Body" 

    With ActiveDocument.Tables(1).Cell(2, 2).Range 

    .Font.Name = "Times New Roman" 
    .Font.Size = 12 
    .Font.Bold = True 
    .Font.Underline = True 
    .Text = myText1 & vbCr & vbCr 
    .Font.Bold = False 
    .Font.Underline = False 
    .Text = myText2 

End With 

Но что происходит, является первым myText1 будет удален и все, что я ушел с это myText2.

и это

With ActiveDocument.Tables(1).Cell(2, 2).Range 
     .Font.Name = "Times New Roman" 
.Font.Size = 12 
.Font.Bold = True 
.Font.Underline = True 
.InsertAfter myText1 & vbCr & vbCr 
.Font.Bold = False 
.Font.Underline = False  
.InsertAfter myText2 

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

Заголовка

Тело

Как я могу переформатировать myText2, отправить его, не потеряв форматированный myText1 выше?

ответ

2

В своем коде вы установили With заявление, чтобы работать со всем диапазоном клетки. Это приводит к форматированию, применяемому ко всей ячейке.

Для применения форматирования вам не нужно использовать объект Selection, вам просто нужно убедиться, что вы работаете с правильным диапазоном. Использование объекта Selection делает код более медленным, когда он перемещает курсор.

Я переписал ваш код ниже.

Sub AddTextToCell() 
    Dim myText1 As String 
    Dim myText2 As String 
    myText1 = "Header" 
    myText2 = "Body" 

    With ActiveDocument.Tables(1).Cell(2, 2).Range 
     .Text = myText1 & vbCr & vbCr & myText2 
     With .Font 
      .Name = "Times New Roman" 
      .Size = 12 
      .Bold = False 
      .Underline = False 
     End With 
     With .Paragraphs.First.Range.Font 
      .Bold = True 
      .Underline = True 
     End With 
    End With 
End Sub 
+0

приятно. работает отлично. спасибо – user6096423

+0

Хороший, похоже, гораздо лучшее решение! –

1

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

Dim myText1 As String 
    Dim myText2 As String 
    myText1 = "Header" 
    myText2 = "Body" 

    With ActiveDocument.Tables(1).Cell(2, 2).Range 
     .Font.Name = "Times New Roman" 
     .Font.Size = 12 
     .Font.Bold = True 
     .Font.Underline = True 
     .Text = myText1 & vbCr & vbCr 
    End With 

    'Select the whole cell 
    ActiveDocument.Tables(1).Cell(2, 2).Select 

    'Move to the right 
    Selection.Collapse Direction:=wdCollapseEnd 
    'Move back to the left 
    Selection.MoveLeft wdCharacter, 1 

    'Add the text (using the myText1 format) 
    Selection.Range.Text = myText2 

    'Select the on word the right (myText2) 
    Selection.MoveRight wdWord, 1, True 

    'Format myText2 
    Selection.Range.Font.Underline = False 
    Selection.Range.Font.Bold = False 
+0

Это направление в правильном направлении, но «Тело» - это абзац с несколькими строками текста. Ваш код работает, чтобы убедиться, что одно слово под заголовком не выделено жирным шрифтом или подчеркнуто, но для всего абзаца только первое слово является простым текстом, а остальная часть абзаца выделена жирным шрифтом и подчеркнута. – user6096423

+1

OK - строка 'Selection.MoveRight wdWord, 1, True' должна быть изменена для учета всего добавленного текста. Известно ли количество текста - всегда ли это один абзац? –

+0

всегда 1 параграф. Я использую код для подсчета количества слов, а затем вставляя эту переменную следующим образом: Selection.MoveRight wdWord, word_count, True. Это работает, но если есть способ ссылаться на абзац, это, вероятно, будет включать меньше кода. Я уже пробовал Selection.MoveRight wdParagraph, 1, True, но переформатировал всю ячейку до простой, включая заголовок. Вот почему я отправился на счетчик слов. Спасибо за ваш ответ. – user6096423

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

  • Нет связанных вопросов^_^