Как заменить предложение над вложенной таблицей, не используя объект выделения - PullRequest
1 голос
/ 31 января 2020

Рассмотрим следующую ситуацию: над вложенной таблицей есть предложение слов, которое необходимо заменить новым текстом.

Я пробовал следующее:

ActiveDocument.Tables(1).Cell(1, 1).Range.Paragraphs(1).Range.Text = "New Text"

Однако конечный результат показан в (2)

Я хочу получить результат (3) в идеале без использования объекта выбора (включая selection.find)

Если выбор объекта используется, я уже придумал решение следующим образом:

ActiveDocument.Tables(1).Cell(1, 1).Range.Paragraphs(1).range.select
selection.typetext "New Text"

Буду признателен за вашу помощь:)

Ответы [ 2 ]

1 голос
/ 31 января 2020

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

Переместить текст из вложенной ячейки в родительскую ячейку

Dim myRange as Range
Dim cellText as String
Set myRange = ActiveDocument.Tables(1).Cell(1, 1).Range
cellText = myRange.Text
cellText = Mid$(myRange.Text, 1, Len(myRange.Text) - 2) 'copy text
myRange.Text = vbNullString 'remove text from cell
myRange.InsertBreak wdColumnBreak 'insert break to allow editing of area before range
myRange.InsertBefore cellText 'places text in the area we created with the wdColumnBreak

Использовать введенный пользователем текст в качестве метки для вложенной ячейки

Dim myRange As Range: Set myRange = ActiveDocument.Tables(1).cell(1, 1).Range
Dim cellText As String

cellText = InputBox("Label Text")
myRange.Move wdParagraph, -1
myRange.Paragraphs(1).Range.Text = vbNullString
myRange.InsertBreak wdColumnBreak
myRange.InsertBefore cellText

Концепция такая же, но это позволяет пользователю вводить новую строку метки.

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

Возможно, это не элегантное решение, но оно работает (приветствую любые конструктивные отзывы)

ActiveDocument.Tables(1).Range.InsertBefore "New Text" & vbCr
vstart = ActiveDocument.Tables(1).Range.Paragraphs(1).Range.End
vend = ActiveDocument.Tables(1).Range.Paragraphs(2).Range.End
ActiveDocument.Range(vstart - 1, vend).delete
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...