Ms从无形子窗体访问vba接收器(捕获)键控事件



我正在开发一个访问程序,用于维护其他应用程序的测试数据。它是一个通用程序,不适用于特定应用程序。假定测试数据存储在数据库表中。因为我的程序事先不知道哪些表是要声明的应用程序的一部分,所以它会从应用程序数据库中读取元数据,并为每个表创建链接表。 为了输入和维护数据,我有一个带有子窗体控件的窗体。此子窗体控件没有预定义的源对象。通过将源对象属性设置为"表。[链接表名称]"子窗体可用于数据输入。当用户从列表中选择另一个应用程序表时,该另一个表将分配给子窗体。 这很好用。 现在我需要处理来自此子窗体的事件。由于子窗体源对象不是窗体,因此这并不明显。当子窗体的事件没有参数时,捕获它们没有问题。您可以编写以下代码:

Me.subformname.form.oncurrent = "=customoncurrent()"

但是如何捕捉关键事件呢?此事件由 2 个参数(键代码、shift(引发。

我不能写:

Me.subformname.form.onkeydown = "=customkeydown()"

在运行时,VBA 将引发事件过程声明中缺少参数的错误。

我曾尝试使用"withevents"子句,但没有成功。也许我对这个条款的可能性知之甚少。

这个问题可以解决吗,如何解决?

马克

这里有一个很好的、简约的解决方案。但是,由于您添加了捕获子窗体事件的要求,因此它变得太简约了!

你可以走几种方法,但我建议这样做:

  • 生成设置为在数据表模式下显示的通用子窗体
  • 将事件处理显式添加到子窗体的类模块
  • 在其中放置一堆带有通用名称的文本框,例如 Field01、Field02 等。该数字应超过最大表中的最大列数
  • 链接到新表时,代码会将表字段名称放在文本框 ControlSource 属性中,在关联的标签中设置标题,并根据需要设置其他属性
  • 最后,编写代码以隐藏未使用的文本框

这可能比其他方法工作量更少。

顺便说一句,不要在表单类模块中使用WithEvents。那只是乞求麻烦。

最新更新