执行后将变量传递给VBA事件处理程序

时间:2016-12-13 19:40:37

标签: vba ms-access events

如果在执行my / sub后发生事件,如何将变量传递给VBA中的事件?

详细信息:

DATA = {
"employee_name": "Brian Weber",
"minutes": 120,
"task_name": "Surfing",
"notes": "These are my notes.",
"date": "2016-12-25"
}
​
​
class WorkLogTests(unittest.TestCase):
    def test_get_employee_name(self):
        with mock.patch('builtins.input',
            return_value=DATA["employee_name"]):
            assert worklog.get_employee_name() == DATA["employee_name"]

这里的概念是我想要一个表单来显示临时表中所有日期的记录,但只允许其中一些记录可编辑。这发生在MS Access 2013中。我设置的方式是:

  1. 创建包含所有日期计算的结构
  2. 根据这些计算将值加载到临时表中
  3. 绑定到该表的连续表单已存在
  4. 执行通常会在此结束
  5. 当表单打开时,它会触发Form_Current事件处理程序
  6. 以某种方式将结构值传递给该处理程序??????
  7. 这更像是一个效率问题而不是其他任何事情,一个重要的问题是如何触发该事件。我还想避免一个答案导致我将结构成员值写入数据库(将是一个警察出局)。我认为VBA必须有一种方法可以暂停执行以检测事件吗?

    谢谢,

1 个答案:

答案 0 :(得分:1)

您需要模块级变量。这样你就可以从模块内的任何地方访问它:

Option Explicit
Private MyValue As MyValueType '<---

Private Sub Some_ParameterlessEventHandler()
    MyValue.SomeMember = 42
End Sub

Private Sub SomeProcedureThatRunsAfterTheHandler()
    Debug.Print MyValue.SomeMember 'outputs 42
End Sub