处理Access表单上的ActiveX事件

时间:2012-07-20 14:54:56

标签: ms-access activex ms-access-2007 access-vba

我有一个用于打开和操作专有图像类型的ActiveX控件。我能够在Access窗体中嵌入控件,并使用对象浏览器能够确定所有类成员。我遇到的唯一问题是处理控件引发的一些事件。

例如,从对象浏览器中我可以看到以下事件定义:

Event RightClicked()

当我将以下代码添加到表单时:

Private Sub CtrlInstanceName_RightClicked()
  'Anything here
End Sub

一切都按预期工作。但是,如果事件声明传递了参数,例如:

Event MeasurementUpdated(id as Long)

添加:

Private Sub CtrlInstanceName_MeasurementUpdated(id as Long)
  'Anything here
End Sub

产生以下错误:

  

表达式...您在生成的事件属性设置中输入   以下错误:过程声明与描述不匹配   具有相同名称的事件或程序。

在添加第二个处理程序后,更糟糕的是,表单上的所有事件处理程序会产生此错误,包括表单引发的事件和表单上的其他控件。

我已经在C#.NET应用程序中测试了ActiveX控件,并且能够处理那里的事件(尽管它们没有按预期工作)。在Visual Studio中,函数原型最终与自动定义的事件处理程序类类型有点奇怪。

关于如何更改事件过程声明以避免此错误的任何想法?

1 个答案:

答案 0 :(得分:0)

就像大多数星期五的问题一样,我后来发现这个问题的答案相当简单。

首先,由于我不熟悉VBA代码编辑器,我不知道可以通过使用代码上方的Object组合框来为嵌入式控件创建存根。选择我的控件名后,我从过程组合框中选择了MeasurementUpdate事件。

正确的声明只是:

Private Sub CtrlInstanceName_MeasurementUpdated(ByVal id as Long)
  'Anything here
End Sub

关键区别是ByVal修饰符。