設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
樓主: roych
打印 上一主題 下一主題

[模塊/函數(shù)] 【新手入門】之五:公共變量與傳址過程、傳值過程

[復(fù)制鏈接]
11#
發(fā)表于 2012-9-25 00:39:31 | 只看該作者
我們一般會(huì)在下面第二個(gè)容易掉進(jìn)陷井!

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

應(yīng)該都看出來了吧,答案:
不管[Sub][Function],如果對(duì)參數(shù)變量加了括號(hào),即使過程參數(shù)是傳址,也會(huì)將參數(shù)作為傳值(參數(shù)復(fù)本傳入過程)
如果還不理解,將fun1改為兩個(gè)參數(shù)(其他稍作修改)再運(yùn)行,你就會(huì)徹底明白

Function fun1(ByRef lng As Long,lng2 As Long) As Integer
    lng = 1000
    lng2=2000
End Function
12#
發(fā)表于 2012-9-25 09:43:28 | 只看該作者
真的新手肯定早嚇跑了.

點(diǎn)擊這里給我發(fā)消息

13#
發(fā)表于 2012-9-25 10:04:24 | 只看該作者
lynnwang 發(fā)表于 2012-9-25 00:39
不管[Sub][Function],如果對(duì)參數(shù)變量加了括號(hào),即使過程參數(shù)是傳址,也會(huì)將參數(shù)作為傳值(參數(shù)復(fù)本傳入過程)


為什么?

點(diǎn)擊這里給我發(fā)消息

14#
發(fā)表于 2012-9-25 10:21:50 | 只看該作者
推演
參數(shù)定義
function x(var as integer)  = function x(byref var as integer)

變量和表達(dá)式
傳遞參數(shù)時(shí)
  1. dim k
  2. dim a as integer
  3. k = x(a)    ' 傳址,即傳的變量的地址,函數(shù)內(nèi)部可以影響 a 的值
復(fù)制代碼
如果拋棄函數(shù)的返回值,VBA 要求如此書寫
  1. x a    ' 同樣傳址,函數(shù)內(nèi)部可以影響 a 的值
復(fù)制代碼
(a) = (a + 0) ' 就 a 數(shù)值類型而言
因此 (a) 是表達(dá)式,它返回的另一個(gè)地址空間中的值,而不是 a 變量地址空間中的值

故:
  1. k = x((a)) ' 此時(shí)傳遞的不是 a 的地址,而是表達(dá)式 (a) 的地址,此時(shí),函數(shù)內(nèi)部影響的是表達(dá)式 (a) 地址空間中的,而不是 a 的值
復(fù)制代碼
如果拋棄函數(shù)返回值,VBA 應(yīng)該這樣寫
  1. x (a)
復(fù)制代碼
15#
發(fā)表于 2012-9-25 22:08:37 | 只看該作者
還是老朱,牛叉,見多識(shí)廣,分析到點(diǎn)了。

()=傳值=值的復(fù)本
16#
發(fā)表于 2012-9-26 04:01:05 | 只看該作者
學(xué)習(xí)。
17#
發(fā)表于 2012-10-6 22:09:55 | 只看該作者
18#
發(fā)表于 2012-10-13 12:46:17 | 只看該作者
好好學(xué)習(xí).
19#
發(fā)表于 2013-3-28 20:49:51 | 只看該作者
系統(tǒng)性學(xué)完。
20#
發(fā)表于 2013-6-27 18:40:32 | 只看該作者
學(xué)習(xí)學(xué)習(xí),謝謝分享!
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機(jī)版|Office中國/Access中國 ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2025-7-17 01:01 , Processed in 0.102761 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表