У меня есть макрос, который поднимает выделенное количество текста из документа A, вставляет его в документ B, опрашивает Word для определения общего количества абзацев в документе B, затем выполняет процедуру для этого текста в документе B, и когда процедура завершена , копирует пересмотренный текст обратно в документ А. Когда это происходит, он оставляет после себя остатки текста в документе AI, которые необходимо удалить. (соответствующая часть макроса размещена ниже). Макрос определяет # абзацев, а затем удаляет установленное количество строк таблицы в документе A на основе # абзацев, расположенных в документе B. Я получаю сообщение об ошибке в строке, и это приводит меня в тупик. Что не так с моим кодом?

Sub info3()
Selection.WholeStory
Dim k As Integer

Dim AD As Document
Dim DP As Object

Set AD = ActiveDocument
Set DP = AD.BuiltInDocumentProperties

' Returns the number of paragraphs and lines in a document.
MsgBox "There are " & DP("Number Of Paragraphs") & _
  " paragraphs containing text " & "and " & DP("Number Of Lines") & _
  " lines counted."
  'top of page
Selection.HomeKey Unit:=wdStory
'remove a row from a table an amount of times determined by # of paragraphs
' if 8 paragraphs detected, do this procedure 4 times.
'following line gets an error statement. Why?
Do Until k > (DP / 2)
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.Rows.Delete
k = k + 1
Loop
End Sub

2 ответа2

0

DP - это объект, а не число, поэтому вы не можете разделить на 2. Вам нужно сохранить количество абзацев в новой переменной

Dim numParagraphs as Integer

numParagraphs = DP("Number Paragraphs")

И используйте это в своем цикле.

Кроме того, вы смешиваете свойства таблицы и текста. Rows - это свойство таблицы, которое необходимо разместить в таблице для удаления строки. Также вы должны использовать индекс для доступа к определенной строке. Например

Selection.Rows(1).Delete

Вы можете очистить выделенный текст с помощью чего-то вроде:

Selection.Text = ""

Но я не знаю, пытаетесь ли вы этого достичь.

0

Комментатор на сайте MS помог мне решить эту проблему ...

Dim k As Integer
Dim AD As Document
Dim DP As Object
Dim LP As Long
Set AD = ActiveDocument
Set DP = AD.BuiltInDocumentProperties
LP = DP("Number Of Paragraphs") / 2

Selection.HomeKey Unit:=wdStory

' if 8 paragraphs detected, do this procedure 4 times.

Do Until k > LP
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.Rows.Delete
k = k + 1
Loop
End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .