Лента Excel считывает значение поля редактирования

#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