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

问题描述 投票:0回答:5

当我尝试调用我创建的函数时遇到类型不匹配错误。

示例:

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 runtime-error
5个回答
6
投票

VBScript
只有一种数据类型,称为 VariantVariant 是一种特殊的数据类型,可以包含不同类型的信息,具体取决于其使用方式。因为 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 ...

    


1
投票
retval 之所以会重新调整不匹配错误,是因为它有一个数值和一个 alpha 值,而 wsh 不喜欢这样。


0
投票
为已发布的代码获取类型不匹配错误的一个可靠方法是将 DoSomething 等定义为

Subs (鉴于名称,这似乎是可能的)。


0
投票
我无法解释为什么这是一个问题,但今天我将函数简化为简单的布尔返回值,但仍然遇到类型不匹配错误。

所以我创建了一个具有相同参数等的新函数。当我更改对新函数的调用时,错误消失了。

我的原始函数具有简单的布尔返回:(MISMATCH ERROR)

Function IsInstalledCheck(valueToCheck, expectedValue, checkType) IsInstalledCheck = vbFalse End Function

我的新函数有一个简单的返回:(有效)

Function IsItemInstalled(valueToCheck, expectedValue, checkType) IsItemInstalled = vbFalse End Function

编辑 请注意,我也尝试过使用标准 True / False 值。解决方案是简单地使用新名称并出于任何有效的神奇原因重新创建相同的函数。函数签名是相同的,变量的顺序、变量名称、测试条件、新函数体中的所有内容都是相同的。


0
投票
我发现如果您的函数位于不同的文件中并且您没有在调用该函数的文件中包含/引用它,也会出现此错误。我疯狂地试图找出为什么该函数无论如何都会崩溃......然后发现我的调用所在的文件没有引用该函数所在的文件。空或找不到错误比类型不匹配要好得多!

© www.soinside.com 2019 - 2024. All rights reserved.