2012-05-26 23 views
0

我正在初始化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 

命名範圍「月」包括所有12行和2列,其中第一列是一個整數(從1到12)和第2欄是每個月的字符串名稱。

任何人都知道爲什麼這個循環不會終止?謝謝。

+1

你有沒有在調試器中通過? –

+0

是的。循環是無限的,所以調試器只是一直一行一行地通過代碼行......沒有任何信息對我有用。 – Alex

+0

ComboBox有任何更改/點擊事件嗎?當一個項目被添加到組合框時,更改事件被觸發。所以可能你有什麼導致循環? –

回答

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 

我設置了一個工作表,其範圍與您所描述的完全相同,並且按照我的預期退出了循環。我從我的例子中刪除了組合框,因爲我想要隔離循環本身。

+0

謝謝。這是一個好主意。事實證明,我正確地遍歷了我的範圍,雖然我需要重新定義我的範圍只看左欄(沒有標題,所以只有整數值1 - 12)。我仍然不確定爲什麼我的循環是無限的,但是一旦我看到我正在循環26個單元格(2個標題和24個單元格),我知道我必須縮小我的命名範圍。這解決了無限循環問題,所以一切都很好。謝謝! – Alex

+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的」 是給我的錯誤「的說法成員找不到」

請再次選擇一個月細胞和所選範圍內給予名稱,然後再試一次。 希望工程。

+0

謝謝你這樣做。但是,您顯然將組合框直接放在工作表上。我在用戶表單上。這可能就是爲什麼你的代碼出錯的原因,而我的代碼卻沒有。但我仍然有無限循環問題。 – Alex

+0

@ user1024973,我已將該下拉列表放在用戶表單上,並在用戶單擊按鈕時顯示。它的工作(沒有無限循環)。 –

+0

然後你的代碼如何說「ActiveSheet.Shapes(」cmbMonths「)。選擇」? ActiveSheet是指一個工作表,而不是一個用戶表單,不是嗎? – Alex