ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 396|回复: 6

[分享] 分享用类模板写的永久保存全局变量案例

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-11 22:31 | 显示全部楼层 |阅读模式
本帖最后由 q3698995 于 2024-8-12 11:59 编辑

今天用类模块写了一个永久保存全局变量的案例
分享给大家。
注意key和value仅支持字符串或数字的格式。


类模块代码:
  1. Option Explicit
  2. Private d As Object
  3. Private ws As Worksheet
  4. Private arr()
  5. Private r&
  6. Private Sub Class_Initialize(): Dim i&: Set d = CreateObject("scripting.dictionary"): Set ws = 基本信息: With ws: On Error Resume Next: .ShowAllData: r = .Columns("A:B").Find("*", , , , , 2).Row: arr = .Columns("A:B").Value2: End With: For i = 1 To r: d(arr(i, 1)) = i: Next: End Sub
  7. Public Sub Add(ByVal key As Variant, ByVal item As Variant): Dim i&, b As Boolean: i = d(key): b = i = 0: r = r - b: i = IIf(b, r, i): arr(i, 1) = key: arr(i, 2) = item: d(key) = i: ws.Range("A" & i & ":B" & i).Value2 = Array(key, item): End Sub
  8. Public Property Get Exists(ByVal key As Variant) As Boolean: Exists = d.Exists(key): End Property
  9. Public Property Get Items() As Variant: Dim v As Variant, i&: v = d.Items: i = UBound(v): ReDim brr(0 To i): For i = 0 To i: brr(i) = arr(v(i), 2): Next: Items = brr: End Property
  10. Public Property Get Keys() As Variant: Keys = d.Keys: End Property
  11. Public Sub Remove(ByVal key As Variant): Dim i&, b As Boolean: i = d(key): b = i = 0: r = r + Not b: i = i + b: On Error Resume Next: arr(i, 1) = Empty: arr(i, 2) = Empty: d.Remove key: With ws: .Range("A" & i & ":B" & i).Value2 = "": End With: End Sub
  12. Public Sub RemoveAll(): d.RemoveAll: With ws: .Columns("A:B").Value2 = "": arr = .Columns("A:B").Value2: End With: r = 0: End Sub
  13. Public Property Get Count&(): Count = d.Count: End Property
  14. Public Property Get item(ByVal key As Variant) As Variant: On Error Resume Next: item = arr(d.item(key), 2): End Property
  15. Private Sub Class_Terminate(): Set d = Nothing: Set ws = Nothing: End Sub
复制代码
标准模块调用测试:
  1. Option Explicit
  2. Private o As Object

  3. '字典有的方法基本都有,不一一举例,注意key和value仅支持字符串或数字的格式

  4. Sub ReadyObj()
  5.     If o Is Nothing Then Set o = New GlobalVar
  6. End Sub

  7. Sub 保存全局变量()
  8.     ReadyObj
  9.     o.RemoveAll '清空全局变量
  10.     o.Add "a", 1 '添加全局变量a,后期改变a的值可以用o.Add "a", 3 方法覆盖原值
  11.     o.Add "b", 2 '添加全局变量
  12. End Sub

  13. Sub 删除全局变量()
  14.     ReadyObj
  15.     o.Remove "a" '删除全局变量
  16. End Sub

  17. Sub 判断全局变量是否存在()
  18.     ReadyObj
  19.     Debug.Print "变量a是否存在返回结果:" & o.Exists("a") '检查变量是否存在
  20.     Debug.Print "变量b是否存在返回结果:" & o.Exists("b") '检查变量是否存在
  21.     Debug.Print "变量c是否存在返回结果:" & o.Exists("c") '检查变量是否存在
  22. End Sub

  23. Sub 打印所有变量()
  24.     Dim i&
  25.     ReadyObj
  26.     i = o.Count
  27.     Debug.Print "变量个数为" & i & "个:"
  28.     For i = 1 To i '输出所有变量
  29.         Debug.Print "变量" & o.Keys()(i - 1) & "的值为:" & o.Items()(i - 1)
  30.     Next
  31. End Sub
复制代码


1723434727368.png

永久保存全局变量.rar

17.66 KB, 下载次数: 15

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-8-12 00:22 | 显示全部楼层
留个记号,类这玩意有点深奥

TA的精华主题

TA的得分主题

发表于 2024-8-12 14:34 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-16 11:52 | 显示全部楼层
本帖最后由 q3698995 于 2024-8-16 11:56 编辑

分享一例永久保存全局变量实用场景案例,第几次打开工作簿

永久保存全局变量实用案例之第几次打开工作簿.rar

19.27 KB, 下载次数: 12

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-8-17 09:43 | 显示全部楼层
有点犯晕,这是要动态永久保存一个全局变量的“名称”,还是变量的值呢?
若以举例的应用场景看,简单点直接将变量与值写到工作表角落头里(不受不同电脑限制),或可试下写到注册表里去(只能本电脑保存)

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-17 11:18 | 显示全部楼层
aman1516 发表于 2024-8-17 09:43
有点犯晕,这是要动态永久保存一个全局变量的“名称”,还是变量的值呢?
若以举例的应用场景看,简单点直 ...

其本质其实就是写到单元格中,只是不用去记存的单元格地址,可以用名称直接返回值。
另外可以直接用类似字典的方法对其进行增删改查。

TA的精华主题

TA的得分主题

发表于 2024-8-17 11:51 | 显示全部楼层
楼主给做个类模块应用的科普吧,感觉有点进不去
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 14:26 , Processed in 0.036393 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表