2010-04-07 3 views
8

Ich weiß, das klingt einfach, aber anscheinend ist es nicht.Wie übergebe ich einen Bereich zu einem Sub in Word VBA?

Wenn ich dies in Word VBA schreibe, sagt es immer "inkompatible Typen" - warum? Und wie kann ich es funktionieren lassen?

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 

Antwort

4

Prozess Range ist ein sub so rufe es nicht mit Klammern. (Der Fehler tritt auf, weil (r) verursacht r ausgewertet werden, die den Standardeigenschaftswert zurückgibt, die range so Mismatches nicht vom Typ ist, was ProcessRange erwartet

Verwendung entweder;.

ProcessRange r 

oder

call ProcessRange(r) 
8

Es ist nicht erlaubt, Sub mit Klammern aufzurufen, außer wenn Sie die Call Anweisung verwenden.

Daher müssen Sie entweder:

Call ProcessRange(r) 

Oder:

ProcessRange r 

Der Grund dafür ist, dass in VBA (und VBS, VB6, auch) die Klammer eine ganze Menge haben kann von verschiedenen Bedeutungen.

In diesem Fall wird das Bereichsobjekt ausgewertet, bevor das Ergebnis an ProcessRange übergeben wird. In diesem Fall führt dies dazu, dass eine string an die Subroutine übergeben wird, da die Standardeigenschaft RangeText ist.

Lesen Sie diesen Artikel für eine Übersicht: http://blogs.msdn.com/ericlippert/archive/2003/09/15/52996.aspx

3

Mit Klammer Visual Basic wird davon ausgegangen werden Sie eine Funktion aufrufen.

ProcessRange r 

funktioniert der Trick