2010-04-07 40 views
8

我知道這聽起來很簡單,但看起來並非如此。如何在Word VBA中將範圍傳遞給子集?

如果我在Word VBA中編寫它,它總是說「不兼容的類型」 - 爲什麼? 我該如何使它工作?

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 

回答

4

過程範圍是sub所以不要用圓括號調用它。 (錯誤發生,因爲(r)導致r進行評估,其返回其默認屬性值,它是類型range所以不匹配什麼ProcessRange預計不

選其一;

ProcessRange r 

call ProcessRange(r) 
8

除非使用Call聲明,否則不允許使用括號呼叫Sub

因此,你可以選擇使用:

Call ProcessRange(r) 

或者:

ProcessRange r 

其原因是,在VBA(和VBS,VB6,太)括號可以有一大堆不同的意思。

在你的情況下,在將結果傳遞給ProcessRange之前,範圍對象將被評估爲。在這種情況下,導致string被傳遞給子,因爲默認屬性RangeText

請參閱這篇文章的概述:http://blogs.msdn.com/ericlippert/archive/2003/09/15/52996.aspx

3

使用括號的Visual Basic假定你調用一個函數。

ProcessRange r 

的伎倆