2010-04-07 18 views
8

So che sembra semplice, ma apparentemente non lo è.Come si passa un intervallo a un sottotitolo in VBA di Word?

Se scrivo questo in Word VBA, dice sempre "tipi incompatibili" - perché? E come posso farlo funzionare?

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 

risposta

4

gamma di processo è un sub in modo da non richiamare con parentesi. (L'errore si verifica perché (r) provoca r da valutare che restituisce il valore della proprietà di default che non è di tipo range così discordanze quali ProcessRange aspetta

utilizzare uno;.

ProcessRange r 

o

call ProcessRange(r) 
8

Non è consentito chiamare uno Sub con parentesi, tranne se si utilizza la dichiarazione .

Quindi è necessario utilizzare uno:

Call ProcessRange(r) 

Oppure:

ProcessRange r 

La ragione di ciò è che in VBA (e VBS, VB6, anche) la parentesi può avere un bel po ' di diversi significati.

Nel tuo caso l'oggetto intervallo sarà valutato prima di passare il risultato a ProcessRange. In questo caso, viene trasferito al sottotitolo string, in quanto la proprietà predefinita di Range è Text.

veda questo articolo per una panoramica: http://blogs.msdn.com/ericlippert/archive/2003/09/15/52996.aspx

3

Utilizzando parentesi Visual Basic presuppone che stai chiamando una funzione.

ProcessRange r 

fa il trucco

Problemi correlati