worksheet(i) döngü

Katılım
24 Kasım 2007
Mesajlar
769
Excel Vers. ve Dili
Office 365 - Türkçe
Altın Üyelik Bitiş Tarihi
30-01-2024
merhaba

arkadaşlar excel dosyasında 1 ile başlayıp 80 ile biten (bazen 80'den fazla oluyor, değişken) sayfalarım var. Ben her sayfadan belli kriterler ile veri alacağım.


Set s2 = Workbooks("20A").Worksheets(i) satırında hata alıyorum,
Set s2 = Workbooks("20A").Worksheets("1")
Set s2 = Workbooks("20A").Worksheets("2")
Set s2 = Workbooks("20A").Worksheets("3")
....... gibi sayfa isimlerini "i" değişkeni yerine ben kendim manuel yazarsam o zaman kod çalışıyor, ben "i" değişkenini integer olarak tanımlamıştım. Ondan mı görmüyor

Kod:
Sub Calistir()
Application.Calculation = xlCalculationManual
Workbooks.Open "I:\ATL\20A.xlsm", ReadOnly:=True
Application.ScreenUpdating = False

'On Error Resume Next
Dim i As Integer
Dim m As Integer

For i = 1 To 80
Set s1 = ThisWorkbook.Worksheets("VERI")
Set s2 = Workbooks("20A").Worksheets(i)



    If s2.Cells(47, 7) = "" Then
        sonsatirM = s2.Range("B65536").End(xlUp).Row
        If s1.Range("B65536").End(xlUp).Row < 8 Then
        sonsatir = 8
        Else
        sonsatir = s1.Range("B65536").End(xlUp).Row
        End If
     
        For m = 50 To sonsatirM
        If s2.Cells(m, 3) = s1.Cells(3, 3) Then 'Hangi Ay
        s1.Cells(sonsatir, 2) = s2.Cells(m, 2)
        s1.Cells(sonsatir, 3) = s2.Cells(m, 3)
        s1.Cells(sonsatir, 4) = s2.Cells(m, 4)
        s1.Cells(sonsatir, 5) = s2.Cells(m, 5)
        sonsatir = sonsatir + 1
        End If
        Next m
    End If
Next i

'Workbooks("20A").Close SaveChanges:=False
'Application.Calculation = xlCalculationAutomatic
End Sub
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,071
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
If s2.Cells(47, 7) = "" Then

yerine

If sheets(i).Cells(47, 7) = "" Then

kullanabilirsiniz. Dieğr satırlarda da bu şekilde düzeltmelisiniz.
 
Katılım
24 Kasım 2007
Mesajlar
769
Excel Vers. ve Dili
Office 365 - Türkçe
Altın Üyelik Bitiş Tarihi
30-01-2024
Olmadı.
s2 yerine sheets(i) yapsam bile hangi kitabın içindeki sheets(i) olduğunu tanımamam lazım değilmi ?

If Workbooks("20A").sheets(i).Cells(47, 7) = "" Then gibi, Bunuda denedim sonuç vermedi
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,071
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Ben workbook kısmına dikkat etmemişim. Fazla bilgim yok ancak 20A değil de 20A.xlsm gibi uzantısıyla beraber olması gerekmez mi?
 
Katılım
24 Kasım 2007
Mesajlar
769
Excel Vers. ve Dili
Office 365 - Türkçe
Altın Üyelik Bitiş Tarihi
30-01-2024
Workbooks("20A").sheets(i)
bu tarz bi değişklik yaptığımda 1 isimli sayfaya değil sayfa1(ABC) ye gidiyor
Sayfa1(ABC) --> Bu sayfada değişklik yapmaya çalışıyor,
Sayfa2(BDE)
Sayfa3(1) --> Normal de 1 isimli sayfa bu
Sayfa4(2)
Sayfa5(3)

Workbooks("20A").sheets("i") yaptğımda ise hiç çalışmıyor
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,071
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Belki şöyle olabilir: Sayfa ismi kontrolü için

If sheets(i).name = i then

şeklinde if sorgusu kurulup, for next döngüsünü de buna uydurarak düzeltebilirsiniz.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,751
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Sayfa isminiz 1 ise bunu kod tarafında aşağıdaki gibi yazabilirsiniz.

Kod:
Sheets("1")
Döngü işleminde Sheets(i) dediğinizde bu sefer sayfaların index (sıra) numaralarını ifade etmiş olursunuz. Bunu yerine aşağıdaki gibi yazarsanız gerçek sayfa adı değerini kullanmış olursunuz.

Siz dosyayı açarak işlem yaptığınız için aşağıdaki yapıyı kullanabilirsiniz.

Kod:
Set S2 = ActiveWorkbook.Sheets(Cstr(i))
Not: Ben bu gibi durumlarda hem dosya isimlerini hem de sayfa isimlerini değişkenlere tanımlıyorum. Kod içinde kullanırken çok kolaylık sağlıyor.
 
Katılım
24 Kasım 2007
Mesajlar
769
Excel Vers. ve Dili
Office 365 - Türkçe
Altın Üyelik Bitiş Tarihi
30-01-2024
Teşekkür ederim.
Korhan bey "Set S2 = ActiveWorkbook.Sheets(Cstr(i))" kod çalışıyor

Dün akşam farklı bir şey aklıma geldi. Bunu uygulama fırsatı buldum. ve çalıştırdım.
Workbooks("20A").sheets(i), buradaki "i" sayı tipindeydi, bende metin tipinde başka bir değişken tanımladım ve "i" yi bu değişkene atadım. Şöyle ;

Kod:
Dim i As Integer
Dim n As String

For i = 1 To 5
n = i

Workbooks("20A").sheets(n)
Belki şansına tutmuş olabilir ama çalıştı :)
 
Üst