当我尝试调用我创建的函数时遇到类型不匹配错误。
示例:
Function DoThis(paramA, paramB, paramC)
If paramA = "Something" Then
DoThis = DoSomething
ElseIf paramA = "This" Then
DoThis = DoSomethingDifferent
Else
DoThis = DoThisOtherThing
End If
End Function
Dim result: result = DoThis(valueA, ValueB, ValueC)
有人能看出我的错误是什么吗?其他功能工作正常。我通过实际复制并粘贴函数名称到我调用的地方来仔细检查拼写。我已经验证函数名称没有在其他地方使用,即作为常量或其他东西。
请注意,调试时所有参数的 ValType 都是 vbString。另外,我永远无法输入该函数,所以这不像我正在调试该函数,输入它然后得到类型不匹配。
ty.
VBScript
只有一种数据类型,称为 Variant。 Variant 是一种特殊的数据类型,可以包含不同类型的信息,具体取决于其使用方式。因为 Variant 是 VBScript
中唯一的数据类型,所以它也是 VBScript
中所有函数返回的数据类型。
Variant 可以包含一些数据子类型(例如
Empty, Null, string, integer, object, array
等)。您可以使用一些转换函数 将数据从一种子类型转换为另一种子类型(如果该转换不是隐含在 VBScript
中)。现在,请注意 True
和 vbTrue
的真实数据子类型。
True关键字(boolean文字)的值(内部表示)等于-1。
另一方面,vbTrue是少数几个内置常量之一,尽管它的名字如此,但它有一个Integer的子类型!它是所谓的 Tristate 常量之一:
Constant Value Description
vbUseDefault -2 Use default from computer's regional settings.
vbTrue -1 True
vbFalse 0 False
我希望下一个代码可以清楚地说明以上所有内容:
Wscript.Echo _
vbTrue, CStr( vbTrue), VarType( vbTrue), TypeName( vbTrue) , _
vbNewLine, True, CStr( True), VarType( True), TypeName( True)
但是,与
If _condition_ Then ...
一起使用,有一些特殊性;简而言之: 仅当单个测试If 条件
不是
Then
时,If ...
语句的 False
部分才会有条件地执行语句组,即任何非零数值为 true,而不仅仅是 -1。因此,只要结果是数字,您就可以使用您选择的任何变量或表达式(数字或字符串)...总结:
If _expr_ Then ...
与
If CBool(_expr_) Then ...
Subs (鉴于名称,这似乎是可能的)。
所以我创建了一个具有相同参数等的新函数。当我更改对新函数的调用时,错误消失了。
我的原始函数具有简单的布尔返回:(MISMATCH ERROR)
Function IsInstalledCheck(valueToCheck, expectedValue, checkType)
IsInstalledCheck = vbFalse
End Function
我的新函数有一个简单的返回:(有效)
Function IsItemInstalled(valueToCheck, expectedValue, checkType)
IsItemInstalled = vbFalse
End Function
编辑 请注意,我也尝试过使用标准 True / False 值。解决方案是简单地使用新名称并出于任何有效的神奇原因重新创建相同的函数。函数签名是相同的,变量的顺序、变量名称、测试条件、新函数体中的所有内容都是相同的。