2011-06-22 17 views
5

El objeto de párrafo en Word tiene una propiedad llamada Rango. Dentro de este objeto de rango tiene una propiedad llamada Celdas.¿Cómo comprobar si un párrafo está en una tabla o no en una macro MS-Word?

Para el párrafo que no está en una tabla, esta propiedad Paragraph.Range.Cells está establecida en "". Esto se puede ver en la ventana de Relojes en modo de depuración.

Para el párrafo que está en una tabla, la propiedad Paragraph.Range.Cells tiene otras propiedades, por ejemplo, tiene una propiedad llamada Count.

Estoy usando esta propiedad de Paragraph.Range.Cells para determinar si el párrafo está en una tabla o no. Sin embargo, no puedo entender cómo probar esto.

Por ejemplo, no puedo simplemente probar así ...

Si paragraph.Range.Cells <> Null Entonces .... o incluso Si IsNull (paragraph.Range.Cells) Entonces ...

se genera un error de tiempo de ejecución '5907' no hay una mesa en este lugar

Así que, ¿cómo voy a probar esto? gracias

+0

Consulte mi respuesta a continuación, y también el Err específico = 5907 editado más adelante. – Ahmad

Respuesta

1

* Editado (si Err =) cambió a (Si Err <>)

Usted puede simplemente permitir que el error suceda y atraparlo usando OnError comunicado

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 aunque parezca difícil, tienes tus '' comentarios 'mezclados. 'Si Err = 5907 Entonces 'No se produjo ningún error' ... En realidad, se produjo el error 5907. –

+0

Muchas gracias por el aviso. – Ahmad

+0

Lo corregí justo después de leer su comentario. Gracias de nuevo, merci boucoup – Ahmad

6

Puede' Llamar al método Cells a menos que el párrafo esté en una tabla. Necesita usar un método diferente para determinar si el rango está en una tabla.

Puede utilizar cualquiera ...

paragraph.Range.Tables.Count > 0 

... o ...

paragraph.Range.Information(wdWithinTable) 

Tenga en cuenta que el segundo parece más obvio, pero en realidad es más lenta (sólo un problema si estás haciendo esto dentro de un bucle).

+0

'paragraph.Range.Tables.Count> 0' lo hizo (incluso con Word Interop en .Net) :) – JanDotNet

10

Puede utilizar el Information property:

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

Por lo tanto no es necesario ningún error manual de la captura de los mecanismos.

Cuestiones relacionadas