日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

redirect通过url_for传递参数_Excel VBA解读 | 进阶篇(127):Sub过程的参数传递技术...

發(fā)布時(shí)間:2024/4/13 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redirect通过url_for传递参数_Excel VBA解读 | 进阶篇(127):Sub过程的参数传递技术... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

學(xué)習(xí)Excel技術(shù),關(guān)注微信公眾號(hào):

excelperfect

前面用了幾篇文章詳細(xì)講解了Sub過(guò)程的語(yǔ)法及相關(guān)知識(shí),本文進(jìn)一步講解與Sub過(guò)程相關(guān)的一些“重要事項(xiàng)”,以進(jìn)一步理解Sub過(guò)程的使用。

ByRef和ByVal

我們知道,可以在調(diào)用其他過(guò)程時(shí),向該過(guò)程傳遞參數(shù)。通常使用ByVal來(lái)指定參數(shù)通過(guò)值傳遞,或者使用ByRef來(lái)指定參數(shù)通過(guò)引用傳遞。如果沒(méi)有指定限定詞,則默認(rèn)為ByRef,即參數(shù)通過(guò)引用傳遞。

那么,什么是通過(guò)引用傳遞呢?先看下面的示例代碼:

Sub testMy()

??? Dim my As Long

??? my = 1

??? Call testYour(my)

??? Debug.Print my

End Sub

Sub testYour(ByRef your As Long)

??? your = your + 8

End Sub

運(yùn)行testMy過(guò)程后的結(jié)果如下圖1所示,打印出變量my的值為9。

圖1

所謂引用傳遞,就是將調(diào)用過(guò)程的變量的引用傳遞給了被調(diào)用過(guò)程的參數(shù)變量。也就是說(shuō),它傳遞的是一個(gè)指針,該指針包含調(diào)用過(guò)程中的變量在內(nèi)存中的地址。因此,調(diào)用過(guò)程中的變量與被調(diào)用過(guò)程中的變量都是指向內(nèi)存中的同一地址,如下圖2所示。

圖2

這樣,被調(diào)用過(guò)程中對(duì)變量值的修改,實(shí)際上是對(duì)變量指向的內(nèi)存中地址存儲(chǔ)的值的修改,因此,調(diào)用過(guò)程中的變量值也相應(yīng)被修改。

與引用傳遞不同,值傳遞只是將調(diào)用過(guò)程中的變量的值賦給了被調(diào)用過(guò)程中的變量。如下面的代碼所示:

Sub testMy()

??? Dim my As Long

??? my = 1

??? Call testYour(my)

??? Debug.Print my

End Sub

Sub testYour(ByVal your As Long)

??? your = your + 8

End Sub

運(yùn)行代碼后的結(jié)果如下圖3所示,打印出變量my的值仍為1。

圖3

可以看出,值傳遞并不會(huì)改變所傳遞的變量的值。這是因?yàn)?#xff0c;調(diào)用過(guò)程中的變量與被調(diào)用過(guò)程中的參數(shù)變量分別在不同的內(nèi)存地址中存儲(chǔ)各自的值,如下圖4所示。

圖4

因此,被調(diào)用過(guò)程中的參數(shù)變量值的修改不會(huì)影響到調(diào)用過(guò)程中變量的值。

Sub過(guò)程不返回值嗎?

一般來(lái)說(shuō),Sub過(guò)程不返回值,Function過(guò)程才返回值(完美Excel后續(xù)文章將詳細(xì)講解Function過(guò)程)。然而,使用ByRef方式傳遞參數(shù)值,我們可以得到其“返回的值”。正如上文圖1所示的代碼,調(diào)用過(guò)程testYour后,my的值變?yōu)榱?。

ParamArray

可以使用ParamArray來(lái)指定參數(shù)是一個(gè)包含任意元素的變體數(shù)組,但是只能作為Sub過(guò)程的參數(shù)列表的最后一個(gè)元素。也就是說(shuō),通過(guò)使用ParamArray指定參數(shù),可以實(shí)現(xiàn)給Sub過(guò)程傳遞任意數(shù)量的變量。

看看下面的示例代碼:

Sub testParam()

??? Dim my As Long

??? my = 10

??? Call testOur(my, 1, 2, 3)

End Sub

Sub testOur(our As Long, ParamArray ArgsList() As Variant)

??? Dim lResult As Long

??? Dim vArg As Variant

??? For Each vArg In ArgsList

??????? lResult = our + vArg

???? ???Debug.Print lResult

??? Next

End Sub

打印的結(jié)果為11、12、13,如下圖5所示。

圖5

從代碼中可以看出,在調(diào)用過(guò)程testParam中,并沒(méi)有將參數(shù)作為數(shù)組來(lái)顯示傳遞,而是以逗號(hào)分隔的值來(lái)傳遞。

當(dāng)然,也可以變量列表的形式來(lái)傳遞。例如:

Sub testParamByVar()

???Dim my As Long

???Dim your1 As Long

???Dim your2 As Long

???Dim your3 As Long

???my = 10

???your1 = 1

???your2 = 2

???your3 = 3

???Call testOur(my, your1, your2, your3)

End Sub

Sub testOur(our As Long,ParamArray ArgsList() As Variant)

???Dim lResult As Long

???Dim vArg As Variant

???For Each vArg In ArgsList

??????? lResult = our + vArg

??????? Debug.Print lResult

???Next

End Sub

運(yùn)行testParamByVar過(guò)程后,打印出與上圖5相同的結(jié)果。

注意,ParamArray不能與ByRef、ByVal或者Optional同時(shí)使用。

超強(qiáng)干貨來(lái)襲 云風(fēng)專(zhuān)訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的redirect通过url_for传递参数_Excel VBA解读 | 进阶篇(127):Sub过程的参数传递技术...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。