我尝试使用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()
没有一个工作。
答案 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。