在VBA中變量的作用域
網(wǎng)友提問:


回答網(wǎng)友問題:
解決這個問題,需要理解變量作用域
關(guān)于作用域在AccessVBA第一季里有講? 通用所有VBA

Sub 是一個過程? ,你可以理解為,你是一家電腦生產(chǎn)商,但是配件不可能都是你自己的,你需要CPU時,Call intel? ?或者 Call AMD? 讓他們?nèi)ドa(chǎn)
intel和AMD生產(chǎn)CPU是一系列的動作?,
但是如果你需要一塊CPU,就沒必要call他們了,直接買一塊不就好了?
當返回一個值時,我們沒有必要用Sub,因為這樣只會越來越麻煩
稍候我回答你的問題,我先說一個簡單的案例
如下圖所示

其實你想返回5,sub a 中定義了aa = 3 , 然后呼叫sub b 想得到他的bb= 2
在sub a中讓aa+bb = 3+2 = 5
但是,bb是一個變量,他只在本sub中生效,你的sub a中沒有對變量bb賦值所以他默認為0
為了解決這個問題
我們需要使用模塊級作用域,讓變量bb在本模塊中都有效‘
方法是將變量定義寫在本模塊所有過程最前面

知識點在這里

但是函數(shù)和Sub是不一樣的,這個問題我沒必要寫一個Sub b 直接在Sub a中對bb賦值就行了,如果這個過程比較復(fù)雜 都寫在一個sub中不易維護,那我們可以寫函數(shù)。
過程在什么時候用呢?打個比方,如果我需要在sub a 執(zhí)行中刪除表格所有空行,那這個刪除空行的動作可以寫成sub b? 然后在Sub a中Call? b? ?讓他來執(zhí)行這個動作。
假設(shè)你那邊失火了,你打119,消防員來救火,這一系列的動作需要你呼叫119,你呼叫后由消防員來完成。
當我們需要一個值時,直接賦值或使用函數(shù),值就好比是錢,錢不需要你呼叫,直接拿來用就可以了
函數(shù)名(參數(shù))返回的就是函數(shù)返回的那個值

然后你會發(fā)現(xiàn)還是返回0

對,這就是剛才說的作用域,解決方法我們剛才也講了

如果你要用Call并且將函數(shù)寫成過程,方法是這樣的


ExcelVBA教程:https://www.bilibili.com/video/BV1rt4y1a72y
AccessVBA教程:https://www.bilibili.com/video/BV1tf4y117Sh