Excel VBA: динамический диапазон значений ComboBox.Rowsource не отображается при вызове пользовательской формы из командной кнопки - PullRequest
0 голосов
/ 24 июля 2011

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

Я вставлю весь код и выделю нижеприведенные фрагменты кода ниже:

Private Sub btnGetGAToken_Click()
'--------------------------------
'Obtain API Token from Google Analytics (GA), indicate to user that token has been obtained and populate Account combobox
'with a unique list of accounts, which will in turn populate the Profile combobox with the profiles associated with the chosen
'account
'--------------------------------

Dim txtEmailField As String
Dim txtPasswordField As String

'Values written to sheet for use in UDFToken and UDFGetGAAcctData array formulas
Range("FieldEmail").Value = Me.txtEmailField.Text
Range("FieldPassword").Value = Me.txtPasswordField.Text

Range("GAToken").Calculate

With Me.lblGATokenResponseField
    .Caption = Range("GAToken").Value
    .ForeColor = RGB(2, 80, 0)
End With

Call FindUniqueAccountNames

cboAccountNamesComboBox.RowSource = Sheet1.Range("ListUniqueAccountNames").Address

End Sub

Private Sub cboAccountNamesComboBox_Change()

'Value written to sheet for use in the 'ListProfileNames' dynamic, named range
Range("ChosenAccount").Value = Me.cboAccountNamesComboBox.Value

With Me.cboProfileNamesComboBox
    .Value = ""
    .RowSource = Sheets("CodeMetaData").Range("ListProfileNames").Address
End With

End Sub

Динамический диапазон был создан с помощью диспетчера имен и имеет следующие значения:

Именованный диапазон: "ListUniqueAccountNames" = OFFSET (CodeMetaData! $ J $ 5,0,0, COUNTA (CodeMetaData!$ J $ 5: $ J $ 5000))

и для простоты использования код, который я использую для его запуска, приведен ниже:

cboAccountNamesComboBox.RowSource = Sheets("CodeMetaData").Range("ListUniqueAccountNames").Address

Подпрограмма, вызывающая пользовательскую форму:здесь:

Public Sub ShowReportSpecsForm()

Load frmReportSpecs
frmReportSpecs.Show

End Sub

Простите за публикацию такого большого количества кода, но я не уверен точно, что именно вызывает проблему - я все еще очень новичок с формами.

Любая помощь будет принята с благодарностью.Благодаря.

Ответы [ 2 ]

2 голосов
/ 26 июля 2011

Если вы используете свойство rowource и именованные диапазоны, то я бы предложил установить свойство rowource для выпадающего списка во время разработки.Затем для отладки там, где требуется, используйте:

Debug.Print Range("ListUniqueAccountNames").Address

Это вернет адрес именованного диапазона в ближайшее окно, где вы можете проверить его правильность.

0 голосов
/ 15 ноября 2012

Помните, что свойство Адрес из именованного динамического диапазона возвращает нормальный статический адрес.

Например, Range ("ListUniqueAccountNames"). Адрес может вернуть $ J $ 5: $ J $ 20 .

Вам не нужно использовать адрес Excel в свойстве RowSource . Вы можете использовать имя Excel.

Кроме того, при отображении пользовательской формы необходимо обновить свойство RowSource из элемента управления ComboBox или ListBox, чтобы обновить его значения. (Элемент управления Excel не отслеживает изменение диапазона или данных)

Это обновление можно выполнить внутри события Activate (оно запускается непосредственно перед отображением формы и показано ниже) и в любой ситуации, когда данные или диапазон изменяются.

Private Sub UserForm_Activate()
  Me.cboAccountNamesComboBox.RowSource = ""
  Me.cboAccountNamesComboBox.RowSource = "ListUniqueAccountNames"
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...