当我尝试调用我创建的函数时,我遇到了Type Mismatch错误。
示例:
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。
答案 0 :(得分:4)
VBScript
只有一种名为 Variant 的数据类型。 Variant 是一种特殊的数据类型,可以包含不同类型的信息,具体取决于它的使用方式。由于 Variant 是VBScript
中唯一的数据类型,因此它也是VBScript
中所有函数返回的数据类型。
Variant 可以包含一些数据子类型(例如Empty, Null, string, integer, object, array
等。)您可以使用一些转换函数来转换来自一个子类型的数据另一个,如果VBScript
中没有隐含转换。现在,请注意True
和vbTrue
的真实,实际数据子类型。
True 关键字(布尔文字)的值(内部表示)等于-1。
另一方面, vbTrue 是少数几个内置常量之一,尽管它的名称有一个整数的子类型!它是所谓的三态常量之一:
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 ...
一起使用时,有一些特殊性;简单来说:
Then
语句的If ...
部分仅在单个测试 If condition 不 False
时有条件地执行语句组,即任何非零数字的自尊都是真的,而不仅仅是-1。因此,只要结果是数字...
总结:If _expr_ Then ...
与...相同
If CBool(_expr_) Then ...
答案 1 :(得分:1)
Retval返回不匹配错误的原因是因为它有一个数值和一个alpha值而wsh不喜欢这样。
答案 2 :(得分:0)
确定已发布代码的类型不匹配错误的可靠方法是将DoSomething等定义为 Subs (根据名称,这似乎很可能)。
答案 3 :(得分:0)
我无法解释为什么这是一个问题,但今天我将函数简化为一个简单的布尔返回值,我仍然遇到类型不匹配错误。
然后我创建了一个具有相同参数的新函数。当我将调用更改为新函数时,错误消失了。
我的原始函数使用简单的布尔返回:(MISMATCH ERROR)
Function IsInstalledCheck(valueToCheck, expectedValue, checkType)
IsInstalledCheck = vbFalse
End Function
我的新功能简单回复:(作品)
Function IsItemInstalled(valueToCheck, expectedValue, checkType)
IsItemInstalled = vbFalse
End Function
EDIT 请注意,我也尝试使用标准的True / False值。解决方案是简单地用新名称重新创建相同的函数,以及任何有效的神奇理由。函数签名是相同的,变量的顺序,变量名,测试条件,新函数体内的一切都是一样的。