如何在Word VBA中将一个范围传递给子程序?

8
我知道这听起来很简单,但实际上并不是这样。如果我在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个回答

8

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

因此,您必须使用以下其中一种方法:

Call ProcessRange(r)

或者:

ProcessRange r

那是因为在VBA(以及VBS、VB6)中,括号可以有很多不同的含义。在你的情况中,范围对象将在传递结果到ProcessRange之前进行评估。在这种情况下,它会导致传递给子程序的是string,因为Range的默认属性是Text。请参见此文章以获取概述:http://blogs.msdn.com/ericlippert/archive/2003/09/15/52996.aspx

4

Process Range是一个子程序,因此不要使用括号调用它。(错误发生的原因是(r)导致r被评估,返回其默认属性值,该值不是range类型,因此与ProcessRange所期望的不匹配。)

请使用以下任一方式:

ProcessRange r

或者

call ProcessRange(r)

3

使用括号,Visual Basic会假定你正在调用一个函数。

ProcessRange r

做到了这一点

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接