0

ExcelVBAマクロでユーザーフォームを初期化しています。コンボボックスにアイテムを入力しようとすると、無限ループに陥りますが、理由はわかりません。これが私のコードです:

Private Sub UserForm_Initialize()

  'Populate the combobox with the months
  Me.cboCurrMth.SetFocus
  Dim cMth As Range
  Dim ws As Worksheet
  Set ws = Sheet1
  For Each cMth In ws.Range("months")
      With Me.cboCurrMth
          .AddItem cMth.Value
          .List(.LineCount - 1, 1) = cMth.Offset(0, 1).Value
      End With
  Next cMth

End Sub

名前付き範囲「months」には、12行すべてと2列が含まれ、最初の列は整数(1〜12)で、2番目の列は各月の文字列名です。

このループが終了しない理由を誰かが知っていますか?ありがとう。

4

2 に答える 2

1

私は次のコードを書きました、そしてそれは私のために働きます。Excel2003を使用しています。

ActiveSheet.Shapes("cmbMonths").Select

Dim currMonth As Range
With Selection
    For Each currMonth In Range("Months")
        .AddItem currMonth.Value
    Next
End With

この行「.List(.LineCount-1、1)= cMth.Offset(0、1).Value」は私にエラーを与えています'メンバーが見つかりませんと言っています "

月のセルをもう一度選択し、選択した範囲の名前を付けて、もう一度やり直してください。それがうまくいくことを願っています。

于 2012-05-26T03:12:49.047 に答える
1

本番VBAコードでセルまたは範囲を選択することはめったにありません。ただし、デバッグの目的には非常に役立ちます。

ループにを追加し.selectてから、コードをステップ実行します。For Each何が悪いのか理解できるはずです。

Private Sub WhyAmIInfinite()

  'Loop through and select the months
  Dim cMth As Range
  Dim ws As Worksheet
  Set ws = Sheet1
  For Each cMth In ws.Range("months")
        cMth.Select
  Next cMth

End Sub

私はあなたが説明した通りの範囲でワークシートを設定し、ループは予想通りに終了しました。ループ自体を分離したかったので、例からコンボボックスを削除しました。

于 2012-05-26T12:38:01.207 に答える