2011-06-22 87 views
5

Đối tượng đoạn trong Word có thuộc tính được gọi là Phạm vi. Trong đối tượng Range này có một thuộc tính được gọi là Cells.Làm cách nào để kiểm tra xem một Đoạn có nằm trong Bảng hay không trong macro MS-Word?

Đối với đoạn không có trong bảng, thuộc tính này Paragraph.Range.Cells được đặt thành "". Điều này có thể được nhìn thấy trong cửa sổ Đồng hồ ở chế độ gỡ lỗi.

Đối với đoạn nằm trong bảng, thuộc tính Paragraph.Range.Cells có các thuộc tính khác trong đó, ví dụ: nó có thuộc tính được gọi là Đếm.

Tôi đang sử dụng thuộc tính này của Paragraph.Range.Cells để xác định xem đoạn có nằm trong bảng hay không. Tuy nhiên, tôi không thể tìm ra cách để kiểm tra điều này.

Ví dụ, tôi có thể không chỉ đơn giản là kiểm tra như thế này ...

Nếu paragraph.Range.Cells <> Null Sau đó .... hoặc thậm chí Nếu IsNull (paragraph.Range.Cells) Sau đó, ...

Nó ném lỗi thời gian chạy '5907' Không có bảng nào tại địa điểm này

Vì vậy, làm cách nào để kiểm tra điều này? nhờ

+0

Xem câu trả lời của tôi bên dưới và cũng có thể chỉnh sửa Err = 5907 cụ thể sau này. – Ahmad

Trả lời

1

* Edited (nếu Err =) đổi thành (Nếu Err <>)

Bạn chỉ có thể cho phép các lỗi xảy ra và bắt nó bằng cách sử OnError tuyên bố

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 
+1

+1 thậm chí khó khăn có vẻ như bạn đã nhận được '' bình luận' của bạn trộn lẫn. 'Nếu Err = 5907 'Không xảy ra lỗi' ... Thực ra, lỗi 5907 đã xảy ra. –

+0

Cảm ơn bạn rất nhiều vì đã thông báo. – Ahmad

+0

Tôi đã sửa nó ngay sau khi tôi đọc bình luận của bạn. Cảm ơn một lần nữa, merci boucoup – Ahmad

6

Bạn có thể' t gọi phương thức Cells trừ khi đoạn nằm trong một bảng. Bạn cần sử dụng một phương pháp khác để xác định xem phạm vi có nằm trong bảng hay không.

Bạn có thể sử dụng một trong hai ...

paragraph.Range.Tables.Count > 0 

... hoặc ...

paragraph.Range.Information(wdWithinTable) 

Lưu ý rằng điều thứ hai trông rõ ràng hơn, nhưng thực sự là chậm hơn (chỉ là một vấn đề nếu bạn đang làm điều này bên trong một vòng lặp).

+0

'paragraph.Range.Tables.Count> 0' đã làm nó (ngay cả với Word Interop trong. Net) :) – JanDotNet

10

Bạn có thể sử dụng Information property:

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

Do đó bạn không cần bất kỳ xảy ra lỗi thủ bắt cơ chế.

Các vấn đề liên quan