
场景:下班时间,小毕在整理代码,艾迷糊炫耀着他的“万能模块”

艾迷糊:(得意地拍着胸脯) “看我写的这个模块,所有变量都是Public!就像开闸放水,想用哪个用哪个,这才叫高效编程!”
小毕:(皱着眉头) “可是迷糊,我刚才不小心把你模块里的‘总金额’改成0了……”
艾迷糊:(跳起来) “什么?!我那十万块的测试数据啊!”
老威:(端着茶杯摇头) “小迷糊啊,你这就像把钱包放在广场上任人拿。来,看看什么叫‘保险柜编程法’。”
(老威在代码窗口演示)

' 在模块顶部声明
Public 广场公告牌 As String ' 谁都能改
Private 保险柜密码 As String ' 只有本模块能访问
小毕: “Private?这又是什么法宝?”
老威: “想象一下:
– Public变量:广场公告牌,谁都能看,谁都能改
– Private变量:你的私人保险柜,只有你和你的家人(同一模块)能打开”
艾迷糊: “那跟Dim有什么区别?”
老威: “Dim是在家里随意放东西,Private是给东西加个保险柜!来看实际例子——”
' 在模块顶部声明
Private 员工工资表 As Collection ' 保险柜里的账本
Private 已初始化 As Boolean ' 保险柜的锁
Public Sub 初始化工资表()
If Not 已初始化 Then
Set 员工工资表 = New Collection
员工工资表.Add 5000, "张三"
员工工资表.Add 6000, "李四"
已初始化 = True
MsgBox "工资表已安全存入保险柜!"
Else
MsgBox "保险柜早就准备好了!"
End If
End Sub
Public Function 查询工资(姓名 As String) As Currency
If 已初始化 Then
查询工资 = 员工工资表(姓名)
Else
MsgBox "请先初始化保险柜!"
查询工资 = 0
End If
End Sub
' 外部无法直接访问员工工资表,只能通过我们提供的安全接口
小毕: “哇!这样其他模块就不能随意修改工资数据了!”
艾迷糊: “那要是别人也在他的模块里声明同名变量呢?”
老威: “问得好!这就涉及到作用域的概念了。Private变量就像——”
' 模块1 中
Private 我的秘密 As String
Sub 设置秘密1()
我的秘密 = "模块1的秘密"
MsgBox "模块1说:" & 我的秘密
End Sub
' 模块2 中
Private 我的秘密 As String ' 同名的另一个保险柜!
Sub 设置秘密2()
我的秘密 = "模块2的秘密"
MsgBox "模块2说:" & 我的秘密
End Sub
小毕: (运行两个Sub后)“我清楚了!两个'我的秘密'互不干扰,就像两家银行的保险柜!”
老威: “正是!再来看个更实用的例子——”
' 数据库连接模块
Private 数据库连接 As Object
Private 连接状态 As Boolean
Public Sub 连接数据库()
If Not 连接状态 Then
Set 数据库连接 = CreateObject("ADODB.Connection")
' 这里进行实际连接操作
连接状态 = True
MsgBox "数据库连接成功!"
Else
MsgBox "已经连好了,别重复连接!"
End If
End Sub
Public Sub 关闭连接()
If 连接状态 Then
数据库连接.Close
连接状态 = False
MsgBox "连接已关闭"
End If
End Sub
' 外部只能通过这两个接口操作,无法直接接触连接对象
艾迷糊: “这个好!我以前都是到处直接操作连接对象,常常出问题!”
小毕: “我懂了!Private变量就像给重大数据请了保镖!”
老威: “总结Private变量的三大好处:
1. 数据保护 – 防止意外修改
2. 封装性 – 隐藏实现细节
3. 避免冲突 – 同名变量在不同模块互不影响”
艾迷糊: (突然想到)“那如果我在过程内部用Private呢?”
老威: (大笑)“那就好比在保险柜里再放保险柜——没必要!过程内部用Dim就够了。”
小毕: “我有个好比喻:
– Public:广场演讲,谁都能听
– Private:家庭会议,只有家人能参与
– Dim:个人笔记,只有自己能看”
艾迷糊: (认真地在代码里修改)“我要把所有不该公开的变量都加上Private,给我的数据都配上保镖!”
老威: “记住:好的程序员不是不会犯错,而是让系统不容易犯错。Private就是你的第一道防线!”
如果觉得有用,别忘了 点赞 + 收藏,关注我,获取更多Excel VBA高效编程技巧!
(图片由AI生成)
















暂无评论内容