Excel VBA:ComboBox.Rowsource值的dynamic范围在userForm从commandbutton调用时不显示

标题应该给出一个公平的问题的概述,但我正在运行一个dynamic的命名范围用于在用户窗体中的combobox。 当我运行表单时,值显示为预期的。 当我通过命令button调用模块子例程时,值不会出现,我不知道为什么。

我将粘贴所有的代码,并突出显示下面的有问题的代码片段:

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 

dynamic范围是使用名称pipe理器创build的,如下所示:

命名范围:“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 

原谅我张贴这么多的代码,但我不确定究竟是什么原因导致了这个问题 – 我仍然是一个新手的forms。

任何帮助将不胜感激。 谢谢。

如果你正在使用rowsource属性和命名的范围,那么我会build议在devise时设置combobox的rowsource属性。 然后在需要debugging的地方使用:

 Debug.Print Range("ListUniqueAccountNames").Address 

这将返回指定的范围地址到即时窗口,您可以检查它是正确的。

请记住,从命名的dynamic范围的属性地址返回一个正常的静态地址。

例如, Range(“ListUniqueAccountNames”)。Address可以返回$ J $ 5:$ J $ 20

RowSource属性中不需要使用Excel地址。 您可以使用Excel名称。

此外,当您显示一个用户窗体时,需要刷新ComboBox或ListBox控件的RowSource属性以更新其值。 (如果范围或数据更改,Excel控件不会观察)

这个刷新可以在Activate事件(它在Show表单显示之前运行,如下所示)以及数据或范围发生变化的任何情况下进行。

 Private Sub UserForm_Activate() Me.cboAccountNamesComboBox.RowSource = "" Me.cboAccountNamesComboBox.RowSource = "ListUniqueAccountNames" End Sub