Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access Byref vs Byval vba澄清_Ms Access_Vba - Fatal编程技术网

Ms access Byref vs Byval vba澄清

Ms access Byref vs Byval vba澄清,ms-access,vba,Ms Access,Vba,我写了一些VBA来加深我对Byref和Byval的理解。这就是我正在使用的: Private Function Checkcase() Dim i As Integer i = 1 Debug.Print i num(i) Debug.Print i End Function Public Function num(ByRef i As Integer) i = 5 End Function 输出 1 1 但是,当我在num(I)前面

我写了一些VBA来加深我对Byref和Byval的理解。这就是我正在使用的:

Private Function Checkcase()
    Dim i As Integer
    i = 1
    Debug.Print i
    num(i)
    Debug.Print i
    End Function


Public Function num(ByRef i As Integer)
    i = 5
End Function
输出
1
1

但是,当我在
num(I)
前面使用
call
关键字时,如下所示:

call num(i)
输出更改为
1
5

我希望在这两种情况下的输出都是1和5,因为我正在更改变量I的引用。

num(I)
是这里的错误。当调用sub或函数而未获得返回值时,不得在参数周围加括号

当您将带括号的参数传递给需要
ByRef
参数的函数时,这些参数将自动转换为
ByVal

使用
callnum(i)
或删除括号
num i

参考资料:

如果省略Call关键字,还必须省略argumentlist周围的括号


与往常一样,

如果在参数不止一个时在其周围加上括号,编译器会给您一个“语法错误”,但当只有一个参数时,它会认为您需要显式的
ByVal