设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 29311|回复: 64
打印 上一主题 下一主题

[模块/函数] 【新手入门】之五:公共变量与传址过程、传值过程

[复制链接]
1#
发表于 2012-9-23 15:43:09 | 显示全部楼层
正好,我这里也有一个,更有意思的!{:soso_e104:}

Sub testFuns()
Dim lngRet As Long, varLong As Long
varLong = 1
fun1 varLong
Debug.Print varLong

varLong = 1
fun1 (varLong)
Debug.Print varLong

varLong = 1
Call fun1(varLong)
Debug.Print varLong
End Sub
Function fun1(ByRef lng As Long) As Integer
lng = 1000
End Function

2#
发表于 2012-9-23 15:44:11 | 显示全部楼层
输出:
1000
1
1000

谁知道呢?{:soso_e128:}
3#
发表于 2012-9-23 15:50:11 | 显示全部楼层
同样给出SUB。

Sub testSubs()
Dim lngRet As Long, varLong As Long
varLong = 1
sub1 varLong
Debug.Print varLong

varLong = 1
sub1 (varLong)
Debug.Print varLong

varLong = 1
Call sub1(varLong)
Debug.Print varLong

varLong = 1
Call sub1(lng:=varLong)
Debug.Print varLong

varLong = 1
sub1 lng:=varLong
Debug.Print varLong
End Sub
Sub sub1(ByRef lng As Long)
lng = 1000
End Sub

大家慢慢找答案吧{:soso_e113:}
4#
发表于 2012-9-25 00:39:31 | 显示全部楼层
我们一般会在下面第二个容易掉进陷井!

Sub testFuns()
    Dim lngRet As Long, varLong As Long
    varLong = 1
    fun1 varLong
    Debug.Print varLong

    varLong = 1
    fun1 (varLong)
    Debug.Print varLong

    varLong = 1
    Call fun1(varLong)
    Debug.Print varLong
   
    varLong = 1
    Call fun1((varLong))
    Debug.Print varLong
   
    varLong = 1
    Call fun1(lng:=varLong)
    Debug.Print varLong

    varLong = 1
    Call fun1(lng:=(varLong))
    Debug.Print varLong
End Sub

Function fun1(ByRef lng As Long) As Integer
    lng = 1000
End Function

输出得到:

1000
1
1000
1
1000
1

应该都看出来了吧,答案:
不管[Sub][Function],如果对参数变量加了括号,即使过程参数是传址,也会将参数作为传值(参数复本传入过程)
如果还不理解,将fun1改为两个参数(其他稍作修改)再运行,你就会彻底明白

Function fun1(ByRef lng As Long,lng2 As Long) As Integer
    lng = 1000
    lng2=2000
End Function
5#
发表于 2012-9-25 22:08:37 | 显示全部楼层
还是老朱,牛叉,见多识广,分析到点了。

()=传值=值的复本
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-8 11:16 , Processed in 0.095310 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表