Userform初始化中的无限循环

时间:2012-05-26 02:36:57

标签: excel-vba vba excel

我正在初始化Excel VBA宏中的用户窗体。当我在组合框中填充项目时,我陷入无限循环,但我不知道为什么。这是我的代码:

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 个答案:

答案 0 :(得分:1)

我已经编写了以下代码,它对我有用。我正在使用Excel 2003。

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”给我错误'说找不到成员“

请再次选择您的月份单元格并提供所选范围的名称,然后重试。 希望它有效。

答案 1 :(得分: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

我设置了一个工作表,其范围与您描述的完全一致,并且循环退出了我预期的范围。我从我的例子中删除了组合框,因为我想隔离循环本身。