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