2011-07-23 10 views
0

タイトルは問題の概要を示すはずですが、ユーザーフォームのコンボボックスで動的な名前付き範囲を使用しています。フォームを実行すると、値が意図したとおりに表示されます。私は、コマンドボタンを介してモジュールのサブルーチンを呼び出すと、値が表示されないと私はなぜ分かりません。ダイナミックレンジは、名前マネージャを使用して作成し、以下の通りであるたExcel VBA:commandbouttonからuserFormが呼び出されたときにComboBox.Rowsource値のダイナミックレンジが表示されない

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」

私はすべてのコードを貼り付け、以下の問題のスニペット(複数可)を強調表示します

をし、参照を容易にするために、私はそれを実行するために使用しているコードは以下の通りです:=(!$ J $ 5000)CodeMetaData $ J $ 5,0,0、COUNTA(CodeMetaData $ J $ 5):OFFSET

ユーザーフォームを呼び出す

サブルーチンはここにある:

Public Sub ShowReportSpecsForm() 

Load frmReportSpecs 
frmReportSpecs.Show 

End Sub 

は、コードの大半を投稿するために私を許して、私はそれはそれが問題を引き起こしている正確に何かわからない - 私はまだです非常にフォームを持つ新人。

ご協力いただきますようお願い申し上げます。ありがとう。

+0

デバッグ時に、シート( "CodeMetaData")をチェックしましたか?Range( "ListUniqueAccountNames")。Address' values? – JMax

答えて

2

rowsourceプロパティと名前付き範囲を使用している場合は、設計時にコンボボックスのrowsourceプロパティを設定することをお勧めします。次に、必要な場所でデバッグします。

これは、名前が正しい範囲のアドレスを正しいウィンドウで確認できる即時ウィンドウに返します。

0

名前付きダイナミックレンジのアドレスは、通常の静的アドレスを返します。

例えば

レンジ( "ListUniqueAccountNames")アドレスでき戻り$ J $ 5:$ J 20 $

RowSourceプロパティでExcelアドレスを使用する必要はありません。 Excelの名前を使用できます。

さらに、ユーザーフォームを表示するには、その値を更新するために、ComboBoxまたはListBoxコントロールのプロパティを更新する必要があります(RowSourceプロパティ)。 (範囲やデータが変更された場合、Excelコントロールは監視しません)

このリフレッシュは、Activateイベント(フォームの表示の直前で実行され、以下に示されます)とデータや範囲が変更される状況で行うことができます。

Private Sub UserForm_Activate() 
    Me.cboAccountNamesComboBox.RowSource = "" 
    Me.cboAccountNamesComboBox.RowSource = "ListUniqueAccountNames" 
End Sub 
関連する問題