Как проверить, находится ли абзац в таблице или нет в макросе MS-Word? - PullRequest
5 голосов
/ 22 июня 2011

Объект абзаца в Word имеет свойство Range.Внутри этого объекта Range есть свойство Cells.

Для абзаца, которого нет в таблице, это свойство Paragraph.Range.Cells имеет значение "".Это можно увидеть в окне «Watches» в режиме отладки.

Для абзаца, находящегося в таблице, свойство Paragraph.Range.Cells содержит другие свойства, например, свойство Count.

Я использую это свойство Paragraph.Range.Cells, чтобы определить, находится ли абзац в таблице или нет.Тем не менее, я не могу понять, как это проверить.

Например, я не могу просто так проверить ...

If para.Range.Cells <> Null Then ...или даже если IsNull (para.Range.Cells) То ...

Выдает ошибку времени выполнения '5907' В этом месте нет таблицы

Итак, как бы япроверить это?спасибо

Ответы [ 3 ]

11 голосов
/ 15 июля 2013

Вы можете использовать свойство Information :

If Selection.Information(wdWithInTable) Then
  'What ever you'd like to do
End If

Следовательно, вам не нужны какие-либо ручные механизмы обнаружения ошибок.

7 голосов
/ 22 июня 2011

Вы не можете вызвать метод Cells, если параграф не находится в таблице. Вам нужно использовать другой метод, чтобы определить, находится ли диапазон в таблице.

Вы можете использовать либо ...

paragraph.Range.Tables.Count > 0

... или ...

paragraph.Range.Information(wdWithinTable)

Обратите внимание, что второй выглядит более очевидным, но на самом деле он медленнее (только проблема, если вы делаете это внутри цикла).

1 голос
/ 22 июня 2011

* Изменено (если Err =) изменено на (Если Err <>)

Вы можете просто допустить ошибку и перехватить ее, используя OnError выражение

Dim ParagraphIsTable As Object

    OnError Resume Next        'allows errors to happen but execute next instruction
    ParagraphIsTable = paragraph.Range.Cells

  If Err <> 5907 Then '(this is to check for a specific error that might have happened)
          'No Error occured, this means that ParagraphIsTable variable must contain a value
          ' Do the rest of your code here
    Else
          ' an Error occured, this means that this is not a table
          ' do whatever
    End If
OnError Goto 0          ' This cancels the effect of OnError Resume Next
                  ' Which means if new errors happen, you will be prompt about them
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...