Доброго времени суток, уважаемые!
Работаю над созданием интерфейсного adp-project'а для БД sql server. Разобрался с общим форматированием: вкладки, заголовки кнопки, чекбоксы, эдитбоксы и прочее. В качестве обработки событий, например, нажатий кнопок, первым делом прикрутил макросы, и все прекрасно работает.
Затем в процессе понадобилось вызывать вместо макросов процедуры vba, и тут пошли проблемы.
Пробовал метод Callback'ов, и вызовы функций напрямую, но все эти варианты по тем или иным причинам работать отказываются.
На макросах сделать все не получится, потому как, для эдитбокса при записи в него какого-то строкового значения, логичным было бы обработать событие, используя значение, вписанное в эдитбокс.
В кратце обозначу суть вопросов:
1. Как правильно вызывать функции по событиям из кастомной ленты?
2. Как использовать значение органа управления из ленты при вызове функции обработки события?
Sql server 2008 r2, access 2007
Прикладываю пример моего xml и vba кода из стандартного модуля проекта.
xml:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="true">
<tabs>
<tab idMso="TabHome">
<group idMso="GroupFont" visible="false" />
</tab>
<tab id="CustomTab" label="Клиенты">
<group id="PeopleGroup" label="Люди">
<toggleButton id="ToggleButton1" size="large"
label="Все люди"
onAction="Pplopenmacro" imageMso="ContactPictureMenu"/>
<editBox id="PeopleEditBox"
label="Поиск по рег№"
onChange="MyEditBoxCallbackOnChange" />
<button id="Button3" label="TEST"
size="normal" onAction="=Person_choose()" />
</group>
<group id="CompaniesGroup" label="Компании">
<toggleButton id="ToggleButton2" size="large"
label="Компании"
onAction="Cmpnopenmacro" imageMso="MeetingsWorkspace" />
</group>
</tab>
<tab id="CustomTab2" label="Документы">
<group id="MyGroup" label="Документы" >
<button id="Button1" label="Счета"
size="large" onAction="Invoiceopenmacro" imageMso="BusinessFormWizard" />
<button id="Button2" label="Х%%та"
size="normal" />
</group >
</tab>
</tabs>
</ribbon>
</customUI>
vba:
Public Sub MyEditBoxCallbackgetText(control As IRibbonControl, ByRef strText)
' Callback EditBox
' Select Case control.Id
' Case "PeopleEditBox"
' strText = "Hello World"
' End Select
MsgBox "1"
End Sub
Public Sub MyEditBoxCallbackOnChange(control As IRibbonControl, strText As String)
' Callback Editbox: Returnvalue Editbox
' Select Case control.Id
' Case "PeopleEditBox"
' MsgBox "Value Editbox: " & _
' strText, vbInformation, "Sample EditBox"
' End Select
MsgBox "2"
End Sub
Public Sub Person_choose()
'DoCmd.openForm "People", acNormal
MsgBox "Yahoo!"
End Sub
http://www.sql.ru/forum/1076895/modifikaciya-lenty-adp-proekta-funkcii-i-znacheniya-elementov-upravleniya