#excel #vba #ribbonx
Вопрос:
Я пытаюсь сохранить значение в поле редактирования, а затем использовать его для других подпрограмм. Я не могу найти подходящий код VBA для этого, буду признателен за любую помощь. Спасибо.
мой xml-код Editbox: <editBox id="UserN" label="User name" enabled="false" getText="UserN_getText"/>
Ответ №1:
У вас может быть свойство резервного копирования содержимого элемента управления, чтобы вы могли получить доступ к значению в любой момент времени в надстройке или VBA программно. Чтобы получить значение и настроить кэшированные значения, вы можете использовать getText
и onChange
обратные вызовы со следующими подписями:
onChange
Обратный вызов вызывается, когда значение в поле редактирования изменено и зафиксировано пользователем.
C#: void OnChange(IRibbonControl control, string text)
VBA: Sub OnChange(control As IRibbonControl, text As String)
C : HRESULT OnChange([in] IRibbonControl *pControl, [in] BSTR *pbstrText)
Visual Basic: Sub OnChange(control As IRibbonControl, text As String)
- При
getText
обратном вызове текст будет отображаться в поле редактирования.
C#: string GetText(IRibbonControl control)
VBA: Sub GetText(control As IRibbonControl, ByRef text)
C : HRESULT GetText([in] IRibbonControl *pControl, [out, retval] BSTR *pbstrText)
Visual Basic: Function GetText(control As IRibbonControl) As String
Подробнее о свободном пользовательском интерфейсе (он же ленточный пользовательский интерфейс) читайте в следующей серии статей:
Комментарии:
1. Спасибо @Eugene. мой ответ выше
Ответ №2:
Спасибо @Eugene. Мне удалось правильно понять эту часть, часть, с которой я борюсь, — это чтение значения поля редактирования: при первом открытии файла мой excel подключается к базе данных Access и получает значение, а затем записывает его в поле редактирования (пользователь не может его изменить). В других моих подпрограммах я не хочу использовать то же значение без повторного подключения к базе данных. Я знаю, что приведенный ниже код не сработает, но просто чтобы дать вам представление о том, что я пытаюсь сделать:
Sub ReturnValue()
Set X = IRibbonControl
For Each X In IRibbonControl
If X.ID = "UserN" Then
MsgBox X.Label
Exit Sub
End If
Next X
End Sub