如果输出未捕获,则inputtypes会更改
我正在做一个函数,根据input的types做不同的事情。 不幸的是,我发现input的types取决于输出是否被捕获。
Function what_type(x As Variant) As String Debug.Print TypeName(x) what_type = TypeName(x) End Function Sub range_test() Dim rng As Range Set rng = Sheets("Test").Range("F28:G28") what_type (rng) Debug.Print what_type(rng) End Sub
运行range_test
打印
Variant() Range Range
这不是我所期望的。
这种奇特的行为的基本原理是什么?这里的大图是什么?
在第一次调用what_type
,你已经传递了一个参数(rng)
,即rng
的值作为一个Variant数组。 这导致Debug.Print显示Variant()
。
在第二次调用what_type
,你已经传递了一个rng
参数,即实际的范围对象。 这导致Debug.Print显示Range
,并作为结果返回,然后又是Debug.Printed。
如果你的第一个电话改变为刚刚
what_type rng
它也会显示Range
作为variablestypes。
或者如果你的第二个电话改变了
Debug.Print what_type((rng))
它会在函数内部显示Variant()
和返回的结果。
PS使用子例程的语法来调用一个函数总是一个坏主意。 一个函数返回一个值(或者至less应该 ),并且以某种方式处理返回的值总是一个好主意,那就是赋值给一个variables,或者将它传递给另一个函数/子例程。