我正在初始化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),第二列是每个月的字符串名称。
有人知道为什么这个循环不会终止?感谢。
答案 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
我设置了一个工作表,其范围与您描述的完全一致,并且循环退出了我预期的范围。我从我的例子中删除了组合框,因为我想隔离循环本身。