vbscript调用函数时类型不匹配错误

时间:2014-11-18 21:00:36

标签: vbscript runtime-error

当我尝试调用我创建的函数时,我遇到了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。

4 个答案:

答案 0 :(得分:4)

VBScript只有一种名为 Variant 的数据类型。 Variant 是一种特殊的数据类型,可以包含不同类型的信息,具体取决于它的使用方式。由于 Variant VBScript中唯一的数据类型,因此它也是VBScript中所有函数返回的数据类型。

Variant 可以包含一些数据子类型(例如Empty, Null, string, integer, object, array等。)您可以使用一些转换函数来转换来自一个子类型的数据另一个,如果VBScript中没有隐含转换。现在,请注意TruevbTrue的真实,实际数据子类型。

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值。解决方案是简单地用新名称重新创建相同的函数,以及任何有效的神奇理由。函数签名是相同的,变量的顺序,变量名,测试条件,新函数体内的一切都是一样的。