2016-04-30 5 views
2

Я пытаюсь нажать кнопку в форме в MS Access с помощью VB .net. Тем не менее, я не могу найти в этой области, и у меня есть длинный путь получения кнопки. Затем я застрял - кажется, нет способа активировать событие click.Использование команды VB .net для нажатия кнопки в 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

По умолчанию обработчик события нажатия объявлен в VBA, как

Private Sub Command0_Click() 
    ' do something 
End Sub 

Вы не сможете программно нажать кнопку вне доступа 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 

Если у вас нет доступа к коду доступа VBA, вне .NET вы можете использовать что-то автоматизировать щелчков мыши, как это: https://autohotkey.com/

+0

Да, но я бы хотел, чтобы избежать внешних программ и нажмите кнопку с закрытым подкомпонентом. Если я могу ссылаться на кнопку, наверняка должен быть способ запустить событие. – area9

+0

Попробуйте 'acc.Run (« formName! Command0_Click »)' или вариант, от http://www.mrexcel.com/forum/excel-questions/68143-call-private-sub-different-module.html – djv

+0

nope - попробовал несколько разновидностей, и он вызывает ошибку, которую он не может найти – area9

0

Я имею в виду, если вы должны иметь доступ intslled , откройте и запустите, то почему такой код не запускается из Access? Поэтому нет смысла называть такой код из .net. Однако просто сделать частный вспомогательный щелчок, общественности, а затем вы можете использовать эту форму:

MyAccessApp.Forms("main").command44_click 

Таким образом, вы не должны создавать какие-либо внешние функции и т.д., но если вы хотите, чтобы вызвать этот код непосредственно то форма ДОЛЖНА быть открыта и с запущенным экземпляром этого приложения из .net, то синтаксис выше будет работать.

Я предлагаю вам просто использовать Access здесь, и не понятно, почему .net задействован.

Смежные вопросы