我知道这听起来很简单,但看起来并非如此.
如果我在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)
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,因为默认属性Range为Text.
有关概述,请参阅此文章:http://blogs.msdn.com/ericlippert/archive/2003/09/15/52996.aspx
Process Range 是一个sub,所以不要用括号调用它。(发生错误的原因是要评估的(r)原因r返回其默认属性值,该值不是类型,range因此与ProcessRange预期不匹配。
使用其中之一;
ProcessRange r
Run Code Online (Sandbox Code Playgroud)
或者
call ProcessRange(r)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4719 次 |
| 最近记录: |