Run-Time erorr 1004 Belirlenen koleksiyona olan dizin sınırlar dişinda.

ikikan

Altın Üye
Katılım
3 Mart 2009
Mesajlar
510
Excel Vers. ve Dili
excel 2003 tr
Altın Üyelik Bitiş Tarihi
12.02.2026
Bu kod neden bu hatayı veriyor arkadaşlar.?

Kod:
Sub Obj_Sil_Ekle()
Dim tw As ThisWorkbook
Dim ws1 As Worksheet
dim r

Set tw = ThisWorkbook
Set ws1 = tw.Worksheets(tw.ActiveSheet.Name)

For r = 1 To ws1.OLEObjects.Count ' hata alınan kod satırı makroları ayrı sub() içine koydugumuzda hata almıyor nedeni nedir ?
ws1.OLEObjects(r).Delete
Next r

If ws1.OLEObjects.Count = 0 Then
Dim a , i
  With ws1.OLEObjects
        For i = 1 To 22
        Set lbl = .Add(ClassType:="Forms.TextBox.1")
        lbl.Top = lbl.Top * a
        Debug.Print lbl.Name
        Next i
    End With
   
End If

End Sub
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
5,806
Excel Vers. ve Dili
2019 Türkçe
Merhaba.

ws1.OLEObjects(r).Delete

satırındaki "r" yerine "1" yazın

Aşağıdaki şekilde olacak.

ws1.OLEObjects(1).Delete
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,291
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Özel kişi
Problem aşağıdaki satırdan kaynaklanıyor....

Kod:
For r = 1 To ws1.OLEObjects.Count

Bu satırı aşağıdakiyle değiştirirseniz, hata almazsınız...

Kod:
For r = ws1.OLEObjects.Count To 1 Step -1
.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,237
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
ws1.OLEObjects(1).Delete dendiğinde birinci nesne silindiğinden ikinci nesnenin indexi artık 1' dir. Yani indexlerde kayma olur. For sayacı, ws1.OLEObjects.Count olduğunda koleksiyonda tek nesne kaldığı (oraya kadar bile kalmaz) için hata oluşur. Bu nedenle en son indexten silmeye başlanılır.
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
5,806
Excel Vers. ve Dili
2019 Türkçe
ws1.OLEObjects(1).Delete dendiğinde birinci nesne silindiğinden ikinci nesnenin indexi artık 1' dir. Yani indexlerde kayma olur. For sayacı, ws1.OLEObjects.Count olduğunda koleksiyonda tek nesne kaldığı (oraya kadar bile kalmaz) için hata oluşur. Bu nedenle en son indexten silmeye başlanılır.
Evet ben de o yüzden bu öneride bulundum.

1. indexli nesne her silindiğinde 2. indexli nesnenin indexi 1. olacaktır.
1. indexli nesne değişse bile tüm nesneler bitinceye kadar mutlaka var olacaktır.

Bu yöntem ile silmeye sondan başlamaya gerek yoktur.
 

ikikan

Altın Üye
Katılım
3 Mart 2009
Mesajlar
510
Excel Vers. ve Dili
excel 2003 tr
Altın Üyelik Bitiş Tarihi
12.02.2026
Teşekürler arkadaşlar
 
Üst