在VBA对象的回调函数中获取对象名称?

时间:2014-01-14 20:26:39

标签: vba ms-access ms-access-2010

假设我有一个带有名为cmd_1的命令按钮的用户表单。

出于我的申请的目的,我想对此次点击进行大量验证 - 请参阅this question,了解我正在尝试做些什么。基本上我希望用我根据调用对象名称检查的逻辑规则实现一个回调函数,以确定该控件操作的合格性。

这看起来像是:

private function isValid(p_controlName as string) as boolean
    'logical checks based on the the value of p_controlName
    'returning true/false as appropriate
end function

我将使用类似这样的东西

Private Sub cmd_1_Click()
    if isValid("cmd_1") = false then exit sub
End Sub

现在我将把它放到UI回调的很多中(我不想考虑多少)。我宁愿避免在每个回调中繁琐地添加控件的名称。我非常非常喜欢做类似的事情:

Private Sub cmd_1_Click()
    'this is not valid syntax
    if isValid(ThisControl.name) = false then exit sub
End Sub

由于各种原因,易于实施,一致性,错误发生的可能性等等,这样做更好。

但是我似乎找不到在回调函数中获取调用控件名称的方法。

  • 有没有办法从回调函数中获取VBA代码中控件的名称,以用作我正在尝试的参数?

2 个答案:

答案 0 :(得分:2)

如果它只是按钮单击事件处理程序,那么Screen.ActiveControl.Name应该可以得到你想要的东西 - Screen.ActiveControl返回带有键盘焦点的控件,并且一个命令按钮将键盘焦点点击。< / p>

答案 1 :(得分:0)

或者,为每个使用一个回调函数,使用一个基于您需要的控件名称或信息的参数,并使每个控件都具有:

Dim rect As Control
Dim coll As Form

Set coll = Forms("myForm")
For Each rect In coll.Controls
    If rect.ControlType = acRectangle Then
        rect.OnClick = "=myCallbackFunction(" & param & ")"
    End If
Next rect

myCallbackFunction只是与控件相同的表单上的函数,或模块中的公共函数。

我已经完成了这个,每个矩形(最多100个,在我的表单上的高度0预先生成)被移动并基于记录集可见,然后他们根据记录集中的ID进行此onclick事件设置。在我的例子中,它选择一个不同的子表单记录来匹配单击的矩形。

唐 祝你有美好的一天