我知道这听起来很简单,但看起来并非如此。
如果我在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
答案 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
诀窍