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

mar*_*est 8 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
Run Code Online (Sandbox Code Playgroud)

Dan*_*ski 8

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

因此你必须使用:

Call ProcessRange(r)
Run Code Online (Sandbox Code Playgroud)

要么:

ProcessRange r
Run Code Online (Sandbox Code Playgroud)

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

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

有关概述,请参阅此文章:http://blogs.msdn.com/ericlippert/archive/2003/09/15/52996.aspx


Ale*_* K. 4

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

使用其中之一;

ProcessRange r
Run Code Online (Sandbox Code Playgroud)

或者

call ProcessRange(r)
Run Code Online (Sandbox Code Playgroud)