如何将范围传递给Word VBA中的Sub?

时间:2010-04-07 12:52:32

标签: vba ms-word range

我知道这听起来很简单,但看起来并非如此。

如果我在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

3 个答案:

答案 0 :(得分:8)

除非您使用Sub语句,否则不允许使用括号调用Call

因此你必须使用:

Call ProcessRange(r)

或者:

ProcessRange r

原因在于,在VBA(以及VBS,VB6)中,括号可以有很多不同的含义。

在您的情况下,在将结果传递给ProcessRange之前,范围对象将评估。在这种情况下,它会导致string传递给sub,因为Range的默认属性为Text

请参阅此文章以获取概述:http://blogs.msdn.com/ericlippert/archive/2003/09/15/52996.aspx

答案 1 :(得分:4)

进程范围是sub所以不要用括号调用它。 (发生此错误是因为(r)导致r被评估,返回其默认属性值,该属性值不是range类型,因此与ProcessRange期望的内容不匹配。

使用;

ProcessRange r

call ProcessRange(r)

答案 2 :(得分:3)

使用括号visual basic假设您正在调用函数。

ProcessRange r

诀窍