2010-04-07 35 views
8

Sé que esto suena simple, pero aparentemente no lo es.¿Cómo paso un rango a un sub en Word VBA?

Si escribo esto en Word VBA, siempre dice "tipos incompatibles" - ¿por qué? ¿Y cómo lo hago funcionar?

Sub GetRange() 
    Dim r As Range 
    Set r = ActiveDocument.Paragraphs(5).Range 

    ProcessRange (r) 
End Sub 

Sub ProcessRange(r As Range) 
    Debug.Print "This generates an error (incompatible types)- why?" 
End Sub 

Respuesta

4

gama de procesos es una sub así que no se lo debe invocar con paréntesis. (El error se produce porque (r) provoca r a evaluar que devuelve su valor de la propiedad predeterminada que no es de tipo range así desajustes qué ProcessRange Espera

Uso tampoco;.

ProcessRange r 

o

call ProcessRange(r) 
8

No está permitido llamar a Sub con paréntesis, excepto si está utilizando la instrucción Call.

Por lo tanto usted tiene que utilizar:

Call ProcessRange(r) 

O:

ProcessRange r 

La razón de ello es que en VBA (y VBS, VB6, también) el paréntesis puede tener una porción entera de diferentes significados.

En su caso, el objeto de rango será evaluado antes de pasar el resultado a ProcessRange. En este caso, conduce a string que se pasa al sub, porque la propiedad predeterminada de Range es Text.

Consulte este artículo para obtener una visión general: http://blogs.msdn.com/ericlippert/archive/2003/09/15/52996.aspx

3

El uso de paréntesis Visual Basic asume que está llamando a una función.

ProcessRange r 

hace el truco

Cuestiones relacionadas