0

标题应该对问题给出一个公平的概述,但我正在运行一个动态命名范围,以便在用户表单的组合框中使用。当我运行表单时,值会按预期显示。当我通过命令按钮调用模块子例程时,值不会出现,我不知道为什么。

我将粘贴所有代码并突出显示下面的违规代码段:

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

请原谅我发布了这么多代码,但我不确定究竟是什么导致了问题 - 我仍然是表单的新手。

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

4

2 回答 2

2

如果您使用的是 rowsource 属性和命名范围,那么我建议您在设计时设置组合框的 rowsource 属性。然后在需要的地方进行调试:

Debug.Print Range("ListUniqueAccountNames").Address

这会将命名范围地址返回到即时窗口,您可以在其中检查它是否正确。

于 2011-07-25T21:58:00.123 回答
0

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

例如,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
于 2012-11-15T17:43:34.167 回答