2016-09-27 118 views
0

我想詢問有關運行時錯誤35600「索引超出範圍」的幫助。當從ListView中刪除項目時,VBA運行時錯誤35600

我想從多列ListView中刪除不匹配Combobox值的所有項目。 但是,在刪除過程中,我的代碼似乎達到了listitems-index小於所選項目索引的Point。

有誰知道我該如何解決這個問題?這是我對此採取:

Private Sub ComboBox1_Change() 

Dim i As Integer 
Dim strSearch As String 

strSearch = Me.ComboBox1 

For i = 1 To ListView1.listItems.Count 
    If Me.ListView1.listItems(i).SubItems(3) = strSearch Then 
     Me.ListView1.listItems(i).Checked = True 
    End If 
Next i 
For i = 1 To ListView1.listItems.Count 
    If ListView1.listItems(i).Checked = False Then 
     Me.ListView1.listItems.Remove (ListView1.selectedItem.Index) 
    End If 
Next i 

End Sub 

enter image description here

回答

2

你可以嘗試刪除它們以相反的順序(所以纔有了第二個循環);我認爲,在基本的它看起來像:

For i = ListView1.listItems.Count To 0 Step -1 

大概計數器不是每一個循環之後重新評估,因此會比元素的數量較高造成過高的數量(超過列表項的數量目前導致索引超出界限例外)。

+0

謝謝您的回覆!它現在工作沒有錯誤。 – InternInNeed

+0

不幸的是,使用你的代碼會使函數忽略第一個listview-item。你有什麼想法如何解決這個在我的代碼? – InternInNeed

+0

大概要繼續索引0(原諒我,基本很久以前對我來說) –

0
'Removing part 
With ListView1 
    For i = .ListItems.Count To 1 Step -1 
     If Not .ListItems(i).Checked Then 
      .ListItems.Remove i 
     End If 
    Next 
End With 
+0

你會將「li」定義爲什麼?我得到一個錯誤使用您的代碼 – InternInNeed

+0

解決該問題後,現在使用您的代碼產生運行時錯誤438 - 對象不支持方法在'li.remove li.index' – InternInNeed

+1

請參閱我的編輯。你不能使用'for each',因爲ListItems集合在第一次移除時更新。我的壞 – Marco