Как заставить работать код формы MS Access 2007 в модуле - PullRequest
0 голосов
/ 12 сентября 2018

Я не знаю, возможно ли это, но ...

У меня есть несколько форм, содержащих один и тот же код, но все они имеют разные данные, основанные на разных запросах.

Когда яобновить код в одной форме, я должен сделать те же изменения во всех других формах.

Чтобы упростить процесс обновления, я переместил код формы в модуль, но формы перестали работать.

Как я могу вызвать события из модуля?

Это пример кода в форме, который я хотел бы использовать во всех моих формах:

Public Sub CallSkype_Click()
Dim strProgramName As String
Dim strArgument As String
strProgramName = "C:\Program Files (x86)\Skype\Phone\skype.exe"
strArgument = "/callto:+01" & Me.Phone & ""
Call Shell("""" & strProgramName & """ """ & strArgument & """", 
vbNormalFocus)
End Sub

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Ответ Коминтерна, безусловно, действителен. Но вы также можете настроить код, чтобы использовать текущую активную форму:

Public Sub CallSkype()
    Dim strProgramName As String
    Dim strArgument As String
    strProgramName = "C:\Program Files (x86)\Skype\Phone\skype.exe"
    strArgument = "/callto:+01" & Screen.ActiveForm!Phone.Value & ""
    Call Shell("""" & strProgramName & """ """ & strArgument & """", 
    vbNormalFocus)
End Sub

Преимущество состоит в том, что тогда вы можете установить события на =CallSkype() вместо написания отдельного обработчика событий. Недостатком является то, что он не поддерживает отчеты и может вести себя странно с подчиненными формами.

0 голосов
/ 12 сентября 2018

Еще один вариант - передать телефонный номер в качестве переменной функции:

' sub in module
Public Sub MakeSkypeCall(PhoneNumber As String)
    Dim strProgramName As String
    Dim strArgument As String

    strProgramName = "C:\Program Files (x86)\Skype\Phone\skype.exe"
    strArgument = "/callto:+01" & PhoneNumber
    Call Shell("""" & strProgramName & """ """ & strArgument & """", _
            vbNormalFocus)
End Sub

Тогда ваши формы будут просто звонить этому сабвуферу, передавая номер телефона для звонка:

' calling sub from form
Public Sub CallSkype_Click()
    MakeSkypeCall Me.Phone
End Sub

При таком подходе вы можете легко протестировать код, даже не используя форму.

Возможно, вы также захотите не кодировать путь программы для Skype в своем коде: если другие пользователи используют базу данных, нет гарантии, что Skype будет установлен в этом месте.

0 голосов
/ 12 сентября 2018

Передайте экземпляр формы в качестве параметра и используйте его для замены Me:

Public Sub CallSkypeHandler(instance As Object)
    Dim strProgramName As String
    Dim strArgument As String
    strProgramName = "C:\Program Files (x86)\Skype\Phone\skype.exe"
    strArgument = "/callto:+01" & instance.Phone & ""
    Shell """" & strProgramName & """ """ & strArgument & """", vbNormalFocus
End Sub

Из формы вызова:

Public Sub CallSkype_Click()
    CallSkypeHandler Me
End Sub
...