简体   繁体   中英

How to check if a Paragraph is in a Table or not in MS-Word macro?

The paragraph object in the Word has a property called Range. Within this Range object has a property called Cells.

For paragraph that are not in a table, this property Paragraph.Range.Cells is set to "". This can be seen in the Watches window in debug mode.

For paragraph that are in a table, the property Paragraph.Range.Cells has other properties in it, for example it has a property called Count.

I am using this property of Paragraph.Range.Cells to determine if the paragraph is in a table or not. However, I cant seem to figure out how to test this.

For example, I cannot simply test like this...

If paragraph.Range.Cells <> Null Then.... or even If IsNull(paragraph.Range.Cells) Then ...

It throws a Run-time error '5907' There is no table at this location

So, how would I test for this? thanks

You can use the Information property :

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

Hence you don't need any manual error catching mechanisms.

You can't call the Cells method unless the paragraph is in a table. You need to use a different method to determine whether the range is in a table.

You can use either...

paragraph.Range.Tables.Count > 0

...or...

paragraph.Range.Information(wdWithinTable)

Note that the second one looks more obvious, but is actually slower (only a problem if you're doing this inside a loop).

* Edited (if Err=) changed to (If Err<>)

You can simply allow the error to happen and catch it using OnError statement

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM