Vba “默认范围”属性生成意外结果
作为我发布的答案的后续问题,我想知道为什么以下内容没有出错,这是VBA中可能存在的错误吗 以以下数据为例:Vba “默认范围”属性生成意外结果,vba,excel,worksheet-function,Vba,Excel,Worksheet Function,作为我发布的答案的后续问题,我想知道为什么以下内容没有出错,这是VBA中可能存在的错误吗 以以下数据为例: 如果我们使用以下VBA代码,我们将收到一个错误,因为我们需要使用日期的数值来匹配: '//Produces error Debug.Print WorksheetFunction.Match(Range("C3").Value, Range("A1:A14"), 0) 因此,这两种说法中的任何一种都将起作用: '// Cast to Long Debug.Print Workshe
如果我们使用以下VBA代码,我们将收到一个错误,因为我们需要使用日期的数值来匹配:
'//Produces error
Debug.Print WorksheetFunction.Match(Range("C3").Value, Range("A1:A14"), 0)
因此,这两种说法中的任何一种都将起作用:
'// Cast to Long
Debug.Print WorksheetFunction.Match(CLng(Range("C3").Value), Range("A1:A14"), 0)
'// Access .Value2 property directly
Debug.Print WorksheetFunction.Match(Range("C3").Value2, Range("A1:A14"), 0)
但是,正如所指出的,如果我们不指定属性,它也可以工作:
Debug.Print WorksheetFunction.Match(Range("C3"), Range("A1:A14"), 0)
因此,如果.Value
不起作用,并且这是范围
对象的默认属性-为什么在上面的示例中它起作用
这可能是一只虫子吗?或者是否有某种程度的评估可以抵消这一点?我不认为这是一个bug。如果运行以下宏:
Debug.Print Range("C3"), Range("C3").Value, Range("C3").Value2
前两个将返回相同的结果
2015年3月2日2015年3月2日42065
它将范围对象的默认属性确认为值
但值得注意的是,如果您始终明确使用Value
,它也会起作用
Debug.Print WorksheetFunction.Match(Range("C3").Value, Range("A1:A14").Value, 0)
因此,我认为这是曾经描述过的问题的另一种表现。
如果您没有为这两个属性明确定义值
属性,Excel会很聪明地假设您正在匹配值
。但是,如果您显式地暗示一个属性,而让Excel猜测另一个属性,则它将不起作用。我尝试了.Value
两个参数,但仍然不起作用。事实上,如果我在第二个参数中使用.Value
的话,代码就失败了-它需要的是范围对象而不是数组吗?MSDN意味着数组可以用作第二个参数-我只能认为它可能不起作用,因为.Value
将生成一个二维数组,尽管我还是不明白为什么这样做行不通。这引起了更多的关于d'ohWin 7 32位和XL2010-你?@的问题,所以我在XL2013上。无论如何,我找不到方法来检查Match
如何处理它的操作。我只是根据我发布的链接来回答。是的,我不认为很快就会有一个明确的答案。不幸的是,感谢您的努力,尽管欢呼:)-Lookup_值可以是一个值(数字、文本或逻辑值),也可以是对数字、文本或逻辑值的单元格引用。因此,在这种情况下,WorksheetFunction.Match(Range(“C3”)、Range(“A1:A14”)、0
将不使用Range
对象的默认方法,而是使用Range
对象本身。即使如此,在这种情况下,Range(“C3”)。值
和Range(“C3”)
将被计算并返回相同的“dd/mm/yyyyy”要在函数中使用的值,而不是数值-因此仍应出错?确定;-)?您确切地知道工作表function.Match
在内部是如何工作的吗?我不知道,因为它不是开源的。这正是我想知道的!如果使用Debug.Print
forRange(“C3”)。Value
和Range(“C3”)
可以得到相同的输出,因为它们是以相同的方式计算的-因此这让我认为Match()
方法的底层代码还有其他一些计算在进行…嗯,Debug.Print
必须使用默认方法.Value
,因为它需要一个可以转换为字符串的值。我怀疑是工作表函数。Match
将使用范围
对象。我不知道它在内部做什么。