欢迎光临散文网 会员登陆 & 注册

在VBA中变量的作用域

2023-06-05 09:35 作者:孙兴华zz  | 我要投稿

网友提问:

回答网友问题:

解决这个问题,需要理解变量作用域

关于作用域在AccessVBA第一季里有讲  通用所有VBA

Sub 是一个过程  ,你可以理解为,你是一家电脑生产商,但是配件不可能都是你自己的,你需要CPU时,Call intel   或者 Call AMD  让他们去生产

intel和AMD生产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在本模块中都有效‘

方法是将变量定义写在本模块所有过程最前面

知识点在这里

但是函数和Sub是不一样的,这个问题我没必要写一个Sub b 直接在Sub a中对bb赋值就行了,如果这个过程比较复杂 都写在一个sub中不易维护,那我们可以写函数。

过程在什么时候用呢?打个比方,如果我需要在sub a 执行中删除表格所有空行,那这个删除空行的动作可以写成sub b  然后在Sub a中Call  b   让他来执行这个动作。

假设你那边失火了,你打119,消防员来救火,这一系列的动作需要你呼叫119,你呼叫后由消防员来完成。

当我们需要一个值时,直接赋值或使用函数,值就好比是钱,钱不需要你呼叫,直接拿来用就可以了

函数名(参数)返回的就是函数返回的那个值

然后你会发现还是返回0

对,这就是刚才说的作用域,解决方法我们刚才也讲了

如果你要用Call并且将函数写成过程,方法是这样的

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

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

在VBA中变量的作用域的评论 (共 条)

分享到微博请遵守国家法律