vba - 全局变量不能跨类生存?
问题描述
我有一个 UserForm mailForm
、一个自定义类Document
和一个utilities
声明为Option Private Module
.
以下序列可能会引发错误:
- 用户单击表单上的按钮以调用
mailForm
's 方法Public Sub sendEmail()
- 这个方法称自己为
Document
's 方法Public Sub generatePDF()
- 此方法称自己为
utilities
's 宏Public Sub printPDF()
总而言之,顺序是:user
--> sendEmail() :: form
--> generatePDF() :: class
--> printPDF() :: utilities
。
printPDF()
在模块的宏中utilities
,我可能会在生成 PDF 时出现错误。此错误的触发器应停止执行用户发送电子邮件的操作。
因此,我声明了全局变量 ( Dim errorWhilePDF As Boolean
) 并将声明放在类模块的顶部。如果错误发生在宏printPDF()
中,我只是设置errorWhilePDF = True
。
我的问题是True
模块中设置的这个变量的值utilities
没有保存在用户表单中,它仍然将其读取为假。相反,如果我在模块中声明变量utilities
,用户表单会将其视为Empty
.
我应该如何声明我的变量errorWhilePDF
,以便在模块中设置它utilities
并在用户表单中使用,知道我正在通过类Document
?
解决方案
真正的全局使用全局关键字在标准模块而不是类模块中定义的变量上。类模块是每个实例的(VBA 中的静态类除外)。
推荐阅读
- google-apps-script - 使用 Google Apps 脚本将订阅者添加到 Mailchimp
- deployment - Gitlab Runner - 每个构建的新文件夹
- python - 无法在 exec() 环境中调用函数内部的函数
- ios - 新 iPhone X 型号的尺码等级是多少?
- ruby - 如何使用 Nokogiri 遍历嵌套的 xml 元素
- asp.net-core - 在 .NET Core 2.1 中动态包含预编译 (Razor) 视图
- mysql - 两个不同主键的相同外键
- javascript - WordPress 中 load-scripts.php 的 PageSpeed 问题“删除渲染阻止 JavaScript:”
- python - “HTMLParser”对象没有属性“save_bgn”
- spring - 如何在基于 gradle 的项目中使用前端 maven 插件服务前端?