全局变量不能跨类生存?

时间:2018-05-10 09:15:59

标签: vba excel-vba excel

我有一个UserForm mailForm,一个自定义类Document和一个模块utilities,它被声明为Option Private Module

以下序列可能会引发错误:

  • 用户点击表单上的按钮即可调用mailForm的方法Public Sub sendEmail()
  • 此方法称自己为Document的方法Public Sub generatePDF()
  • 此方法将自己称为utilities的宏Public Sub printPDF()

总之,序列是:user - > sendEmail() :: form - > generatePDF() :: class - > printPDF() :: utilities

在模块printPDF()的宏utilities中,我可能在PDF生成期间出错。此错误的触发器应该停止执行用户发送电子邮件的操作。

因此,我已经声明了全局变量(Dim errorWhilePDF As Boolean)并将声明放在了类模块的顶部。 如果宏printPDF()中发生错误,我只需设置errorWhilePDF = True

我的问题是模块True中设置的此变量的值utilities未保存在用户表单中,该表单仍将其读取为false。如果我在utilities模块中声明变量,则用户表单会将其视为Empty

我应该如何声明我的变量errorWhilePDF,以便将其设置在模块utilities中并在用户表单中使用,因为我知道我正在通过课程Document

1 个答案:

答案 0 :(得分:4)

用于真正的全局使用全局关键字在标准模块中定义的变量而非类模块中定义。类模块是每个实例(异常Static class in VBA)。