2017-07-03 2 views
0

私は20のワークシートにプライベートサブコンボボックスを持っています。私はコンボボックスで年の月を事前にロードしようとしていますが、私はそれを動作させるように思えません。現在のコードで何が問題になっていますか?これは、最初のコンボボックスに120回、などの12ヶ月を追加します。VBA - コンボボックスに月を追加するためのワークシートループ

Sub WorkBook_Open() 
Dim ws As Worksheet 
For Each ws In ThisWorkbook.Worksheets 
     ActiveSheet.ComboBox1.AddItem "January" 
     ActiveSheet.ComboBox1.AddItem "February" 
     ActiveSheet.ComboBox1.AddItem "March" 
     ActiveSheet.ComboBox1.AddItem "April" 
     ActiveSheet.ComboBox1.AddItem "May" 
     ActiveSheet.ComboBox1.AddItem "June" 
     ActiveSheet.ComboBox1.AddItem "July" 
     ActiveSheet.ComboBox1.AddItem "August" 
     ActiveSheet.ComboBox1.AddItem "September" 
     ActiveSheet.ComboBox1.AddItem "October" 
     ActiveSheet.ComboBox1.AddItem "November" 
     ActiveSheet.ComboBox1.AddItem "December" 
Next ws 
End Sub 
+0

「ws.ComboBox1.AddItem」January "などを試してください –

+0

私に"メソッドまたはデータメンバーが見つかりません "というエラーが表示されます –

+0

少なくともその名前の下にはないワークシートにはComboBox1がありません。 –

答えて

3

あなたがws変数を使用して、シートをループしているが、各ワークシートのためにあなたがヶ月を追加しているので、これが起こります現在ActiveSheetです。ただし、最初のActiveSheet.Combobox...行の前にws.Activateを行うことができ - それは単なる悪い習慣だ(how to avoid Select/Activate

悪い例を参照してください。

Sub WorkBook_Open() 
Dim ws As Worksheet 
For Each ws In ThisWorkbook.Worksheets 
    ws.Activate 
    ActiveSheet.ComboBox1.AddItem "January" 
    ActiveSheet.ComboBox1.AddItem "February" 
    '.... 
Next ws 
End Sub 

をそれはws変数を使用することをお勧めします、その後を通じてコン​​トロールにアクセスOLEObjectsコレクション

良い例:

Option Explicit 
Private Sub Workbook_Open() 
Dim ws As Worksheet 
Dim i As Integer 

For Each ws In ThisWorkbook.Worksheets 
    With ws.OLEObjects("Combobox1").Object 
     For i = 1 To 12 
      .AddItem Format(DateSerial(2017, i, 1), "mmmm") 'as per comment! 
     Next i 
    End With 
Next ws 
End Sub 
+0

これはそれです。素晴らしい! –

+0

ようこそ。 B.t.w. 「ComboBox1」オブジェクトを持たないワークシートではエラーになるので、いくつかのチェックやエラー処理を追加することをお勧めします。 –

関連する問題