ByRef 参数类型与布尔值不匹配

Posted

技术标签:

【中文标题】ByRef 参数类型与布尔值不匹配【英文标题】:ByRef Argument type mismatch with Boolean 【发布时间】:2014-02-13 08:31:02 【问题描述】:

我在 Access 表单中有一些 vba 代码,在以下情况下调用时会产生“ByRef Argument type mismatch”错误。

我有一个小功能

NullAndHide(ctl as control,displayitem as Boolean) 

当我这样称呼它时,它会按预期工作。

Call NullAndHide(Me.Control,True)

但是,如果我使用下面的 case 语句尝试根据另一个控件设置 displayitem 的值:

Dim PerPersonOption, PerRoomOption As Boolean

    Select Case PriceType_ID
Case Is = 1 'Per Person
    PerPersonOption = True
    PerRoomOption = False
Case Is = 2 'Per Room
    PerPersonOption = False
    PerRoomOption = True
End Select

然后

Call NullAndHide(Me.Control,PerPersonOption)我得到错误:

ByRef 参数类型不匹配

我已经用

测试了 PerPersonOption 的值
msgBox PerPersonOption 

它返回正确的布尔值。

我的函数需要一个布尔值,我给它一个布尔值 - 那么为什么会出现这个错误?

【问题讨论】:

【参考方案1】:

当声明 Dim PerPersonOption, PerRoomOption As Boolean 时,只有 PerRoomOption 是布尔类型,但 PerPersonOption 是 Variant。

尝试使用Dim PerPersonOption As Boolean, PerRoomOption As Boolean

【讨论】:

确实如此,但你最好将每个变量声明放在它自己的行中,并使用它自己的 Dim。我已经多次看到这些 Dim 快捷方式出错了......最好避免它的陷阱。 感谢 Simco!我的理解是 Dim x, y as z 将两者都声明为 z。我已经明确地将每个选项变暗,并且它按预期工作。不是每一条捷径到头来都是捷径,它会出现。我将遵循您和 Carl 的建议,明确声明每个变量并在其自己的行中。 @Istari 每个Dim 一行真的没有必要,只要记住总是Dim var1 As typeA, var2 As typeB, ...

以上是关于ByRef 参数类型与布尔值不匹配的主要内容,如果未能解决你的问题,请参考以下文章

ByRef 参数类型不匹配 - Excel VBA

VBA:私有子中的编译错误 ByRef 参数类型不匹配

从被调用的函数调用函数时 VBA byref 参数类型不匹配

上下文相关的模板参数推导 - 参数的类型/值不匹配

optional [byval byref] [paramarray] 变量名() as 数据类型

在数据迁移时,出现错误:运算符不存在:布尔 = 整数提示:没有运算符与给定的名称和参数类型匹配