• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

worksheet(i) döngü

Katılım
24 Kasım 2007
Mesajlar
769
Excel Vers. ve Dili
Office 365 - Türkçe
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
 
If s2.Cells(47, 7) = "" Then

yerine

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

kullanabilirsiniz. Dieğr satırlarda da bu şekilde düzeltmelisiniz.
 
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
 
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?
 
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
 
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.
 
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.
 
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ı :)
 
Geri
Üst