ByRef Argument类型与布尔不匹配

Ist*_*ari 3 ms-access vba access-vba

我在Access窗体中有一些vba代码,在下列情况下调用时会产生"ByRef Argument type mismatch"错误.

我有一个小功能

NullAndHide(ctl as control,displayitem as Boolean) 
Run Code Online (Sandbox Code Playgroud)

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

Call NullAndHide(Me.Control,True)
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用以下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
Run Code Online (Sandbox Code Playgroud)

然后

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

ByRef参数类型不匹配

我已经测试了PerPersonOption的值

msgBox PerPersonOption 
Run Code Online (Sandbox Code Playgroud)

并返回正确的布尔值.

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

Dmi*_*liv 6

当声明Dim PerPersonOption, PerRoomOption As Boolean只是PerRoomOption布尔的类型,但是PerPersonOption是Variant.

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

在此输入图像描述

  • 确实,但你最好只是将每个变量声明放在它自己的Dim上.我已经看到这些Dim快捷方式出错了很多次......最好避免陷入困境. (3认同)