使用VB .net单击Access中的命令按钮

时间:2016-04-30 16:21:39

标签: vb.net ms-access

我尝试使用VB .net在MS Access中单击表单中的按钮。但是,我在这个领域找不到多少东西,并且有一点很长的方法来获得按钮。然后我卡住了 - 似乎无法激活点击事件。

使用:

Imports Microsoft.Office.Interop

我有以下按钮来获取按钮:

Dim acc As New Access.Application
acc.OpenCurrentDatabase("C:\path\to\db\aDatabase.accdb")
acc.Visible = True
For i = 0 To acc.Forms.Count - 1
    If acc.Forms.Item(i).Name = "formName" Then
        For j = 0 To acc.Forms.Item(i).Controls.Count - 1
            If acc.Forms.Item(i).Controls.Item(j).name = "btnEnter" Then
                Dim btn As Access.CommandButton = acc.Forms.Item(i).Controls.Item(j)
                '
                ' click on button??
                '
            End If
        Next
    End If
Next

我猜测尝试以下内容:

acc.Application.Run(btn.OnClickMacro)
acc.Application.Run(btn.OnClick)
btn.OnClickMacro
btn.OnClick
btn.performclick()

没有一个工作。

2 个答案:

答案 0 :(得分:0)

默认情况下,click事件处理程序在VBA中声明为

Private Sub Command0_Click()
    ' do something
End Sub

如果它是私有的,您将无法以编程方式单击Access'VBA代码之外的按钮(除非开发人员故意将其公开)。最佳做法是创建一个由处理程序调用的函数,该函数也可以在其他地方调用,而不是通过代码单击按钮。

Private Sub Command0_Click()
    DoSomething
End Sub

' you would have a better chance calling this from .NET
Public Sub DoSomething()
    ' do something
End Sub

如果您无权访问.NET之外的Access VBA代码,则可以使用某些内容自动执行鼠标点击:https://autohotkey.com/

答案 1 :(得分:0)

我的意思是,如果您必须让Access intslled,open和running,那么为什么这些代码不能从Access运行?因此,从.net调用此类代码并没有多大意义。 但是,只需将私有子点击设为公开,然后您就可以使用此表单:

MyAccessApp.Forms("main").command44_click

所以你不必创建任何外部函数等,但如果你想直接调用那段代码,那么必须打开表单,并从.net运行该应用程序的运行实例,那么上面的语法将会工作

我建议你在这里使用Access,但不清楚为什么会涉及.net。