2010-04-07 41 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 

的伎俩