Exit'i Nereye koyacağımı bilemedim!?

Katılım
14 Ocak 2012
Mesajlar
52
Excel Vers. ve Dili
Excel 2016
Merhaba aşağıda kodda bilgileri bir listeden alarak 22-25 arası sayfa çıktı alıyorum. Ancak eğer hücre boş ise çıkış yap benzeri bir kod eklemem lazım çünkü boş sayfa çıkartıyor. Ancak sınırlı bilgimle denemelerim sonucu çözüme ulaşamadım. Yardımcı olabilir misiniz?


İlk "For i = 2 To 16" kısmına bir if then exit sub eklemem lazım ayrıca bir de "For j = 71 To 73" kısmına eklemem lazım. Burada yaptığım "For i = 2 To 16" kısmıyla bir kişinin kimlik bilgilerini evraklara girip çıktı alıyorum sonra bu kişinin 3 farklı adresi ile "For j = 71 To 73" kısmıyla 3 evrak daha çıktı alıyorum ancak liste bittiğinde durmuyor çıkış kodu olmadığı için. Aslında "For i = 2 To 16" 16dan fazla "For j = 71 To 73" 73ten fazla yapmak istiyorum. Çıkış kodu olmadığı için şu an manuel olarak değiştiriyorum.



Kod:
Sub Düğme1_Tıkla()
Set s1 = ThisWorkbook.Worksheets("BİLGİLER")
Set s2 = ThisWorkbook.Worksheets("LİSTE")
Set s3 = ThisWorkbook.Worksheets("1")
For i = 2 To 16


Sayfa1.Range("D15").Value = Sayfa2.Range("C" & i).Value

Sayfa1.Range("D3").Value = Sayfa2.Range("D" & i).Value
Sayfa1.Range("E3").Value = Sayfa2.Range("E" & i).Value
Sayfa1.Range("F3").Value = Sayfa2.Range("F" & i).Value
Sayfa1.Range("J3").Value = Sayfa2.Range("G" & i).Value

Sayfa1.Range("D5").Value = Sayfa2.Range("H" & i).Value
Sayfa1.Range("E5").Value = Sayfa2.Range("I" & i).Value
Sayfa1.Range("F5").Value = Sayfa2.Range("J" & i).Value
Sayfa1.Range("J5").Value = Sayfa2.Range("K" & i).Value

Sayfa1.Range("D7").Value = Sayfa2.Range("L" & i).Value
Sayfa1.Range("E7").Value = Sayfa2.Range("M" & i).Value
Sayfa1.Range("F7").Value = Sayfa2.Range("N" & i).Value
Sayfa1.Range("J7").Value = Sayfa2.Range("O" & i).Value

Sayfa1.Range("D35").Value = Sayfa2.Range("P" & i).Value

Sayfa1.Range("D47").Value = Sayfa2.Range("Q" & i).Value
Sayfa1.Range("D50").Value = Sayfa2.Range("R" & i).Value
Sayfa1.Range("G50").Value = Sayfa2.Range("S" & i).Value
Sayfa1.Range("I50").Value = Sayfa2.Range("T" & i).Value

Sayfa1.Range("D52").Value = Sayfa2.Range("U" & i).Value

Sayfa1.Range("D57").Value = Sayfa2.Range("V" & i).Value
Sayfa1.Range("D59").Value = Sayfa2.Range("W" & i).Value
Sayfa1.Range("D61").Value = Sayfa2.Range("X" & i).Value
Sayfa1.Range("D63").Value = Sayfa2.Range("Y" & i).Value
Sayfa1.Range("D65").Value = Sayfa2.Range("Z" & i).Value
Sayfa1.Range("D67").Value = Sayfa2.Range("AA" & i).Value

Sayfa1.Range("D71").Value = Sayfa2.Range("AB" & i).Value
Sayfa1.Range("J71").Value = Sayfa2.Range("AC" & i).Value
Sayfa1.Range("D72").Value = Sayfa2.Range("AD" & i).Value
Sayfa1.Range("J72").Value = Sayfa2.Range("AE" & i).Value
Sayfa1.Range("D73").Value = Sayfa2.Range("AF" & i).Value
Sayfa1.Range("J73").Value = Sayfa2.Range("AG" & i).Value


Sayfa4.Range("A1:I52").PrintOut
Sayfa4.Range("A53:I90").PrintOut
Sayfa4.Range("A91:I142").PrintOut
Sayfa4.Range("A196:I249").PrintOut
Sayfa4.Range("A250:I294").PrintOut
Sayfa4.Range("A295:I337").PrintOut
Sayfa4.Range("A295:I337").PrintOut
Sayfa4.Range("A338:I365").PrintOut
Sayfa4.Range("A338:I365").PrintOut
Sayfa4.Range("A366:I403").PrintOut
Sayfa4.Range("A366:I403").PrintOut
Sayfa4.Range("A404:I446").PrintOut
Sayfa4.Range("A404:I446").PrintOut
Sayfa4.Range("A447:I486").PrintOut
Sayfa4.Range("A487:I527").PrintOut
Sayfa4.Range("A528:I569").PrintOut
Sayfa4.Range("A528:I569").PrintOut
Sayfa12.PrintOut
Sayfa12.PrintOut
Sayfa4.Range("A570:I621").PrintOut
Sayfa4.Range("A622:I674").PrintOut
Sayfa4.Range("A675:I713").PrintOut


For j = 71 To 73
s3.Range("D184").Value = s1.Range("D" & j).Value
Sayfa4.Range("A143:I192").PrintOut
Next j


Next i

End Sub
 

Ömer

Moderatör
Yönetici
Katılım
18 Ağustos 2007
Mesajlar
22,184
Excel Vers. ve Dili
Microsoft 365 Tr
Ofis 2016 Tr
Merhaba,

Sorunuzu tam olarak anlayamadım, şart ekleyerek deneyiniz.
A1 örnek olsun diye yazdım, A1 boş değilse yazdır dedim. Siz kendinize uyarlarsınız.

For j = 71 To 73
s3.Range("D184").Value = s1.Range("D" & j).Value
If [A1] <> "" Then
Sayfa4.Range("A143:I192").PrintOut
End If
Next j
 
Katılım
14 Ocak 2012
Mesajlar
52
Excel Vers. ve Dili
Excel 2016
Bu ikinci için tamam ancak yukarıda For i = 2 To 16 içinde bir çıkış lazım. Yani ilk for döngüsü için 2den 16ya kontrol ederken mesela 10. satır boş ise çıkış yapsın. şöyle anlatayım;

iki kişinin bilgileri şöyle olsun ;
ömer moderatör 1122334455 anne baba çocuk iş adres1 adres2 adres3
aytaç çeşmebaşı 5544332211 ann2 bab2 çocu2 iş2 adres12 adres22 adres32

önce aşağıdaki bilgileri bir forma kopyalayıp o formla 20 çeşit farklı form çıkartıyorum. Bunu For i = 2 To 16 koduyla yaklaşık 15 kişi için yapmak istiyorum fakat her zaman 15 kişi olmuyor. Bu yüzden mesela 10. kişide kod dursun.
ömer moderatör 1122334455 anne baba çocuk iş

sonra aynı kişinin aşağıdaki bilgileriyle de For j = 71 To 73 koduyla 3 farklı form çıktı alıyorum. Bunu da aynı 15 kişi için yapacağım ama herkesin 3 adresi olmuyor bu yüzden 2 adres varsa 2 form çıkarsın.
adres1 adres2 adres3
 

Ömer

Moderatör
Yönetici
Katılım
18 Ağustos 2007
Mesajlar
22,184
Excel Vers. ve Dili
Microsoft 365 Tr
Ofis 2016 Tr
Soru-1) 10. kişide durduktan sonra(11.satır boş olduğu için) For j = 71 To 73 çalıştırıp kod işlemini bitirecek mi? Yoksa 12. satırında boş-dolu kontrolü olacak mı? Bu şekilde 16.satıra kadar kontrol mü edecek?

Soru-2) 2 to 16 arasında boş hücreler mi var yoksa son dolu satıra kadar mı işlem yapmak istiyorsunuz? 71 to 73 içinde bu sorum geçerli?
 
Katılım
14 Ocak 2012
Mesajlar
52
Excel Vers. ve Dili
Excel 2016
Cevap-1) 10. kişide durduktan sonra(11.satır boş olduğu için) kod işlemi bitirecek. Ancak burada bir uyarı yapmam lazım. For j = 71 To 73 döngüsünü her kişi için kişinin çıktılarını alırken yapmak istiyorum. Yani 2to16 çalışırken 2. kişi içinde 71to73 çalışsın sonra 3. kişiye geçip tekrar çalışsın.

Cevap-2) 2to16 arasında son dolu satıra kadar işlem yapsın aynı şey 71to73 içinde geçerli.
 

Ömer

Moderatör
Yönetici
Katılım
18 Ağustos 2007
Mesajlar
22,184
Excel Vers. ve Dili
Microsoft 365 Tr
Ofis 2016 Tr
Son dolu satıra kadar çalışması için 16 ve 73 yerine aşağıdaki satırı ekleyin. "A" sütunun için son dolu satır anlamını ifade eder. Siz kendinize göre "A" yı değiştirirsiniz.
Cells(Rows.Count, "A").End(xlUp).Row



Eğer son dolu satıra kadar arada boşluklar olacaksa yapıyı aşağıdaki gibi kurabilirsiniz. "A" ları kendinize göre değiştirirsiniz.
Kod:
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
    If Cells(i, "A") <> "" Then
        'kodlar
        'kodlar
        '
        '
        For j = 71 To Cells(Rows.Count, "A").End(xlUp).Row
            If Cells(j, "A") <> "" Then
                'kodlar
                'kodlar
                '
                '
            End If
        Next j
    End If
Next i
"Uyarı yapmam lazım" cümlenizdeki soruyu anlayamadım?

.
 
Katılım
14 Ocak 2012
Mesajlar
52
Excel Vers. ve Dili
Excel 2016
İşimin yoğunluğu nedeniyle kodu yeni deneyebildim. Teşekkürler kod çalıştı. Fakat siz hücreleri sadece bir sayfada kontrol etmek için yapmışsınız ben de sayfa tanımlamasını ekledim ve sorunsuz çalıştı son hali şu şekilde;

"Uyarı yapmam lazım" cümlesini ben anlatamamışım ama siz anlayıp doğru şekilde kodu yazmışsınız :)

Bir de For j = 71 To Cells(Rows.Count, "A").End(xlUp).Row kısmı benim için sorun çıkardı çünkü sonraki hücrelerin dolu olduğunu unutmuşum. Şimdilik kendim 71to73 olarak sınırladım. Fakat formu tekrar düzenleyip sizin kodu kullanacağım çünkü sizin yazdığınız hali bana daha güzel seçenekler sunuyor. Tekrar teşekkürler.



Kod:
Set s1 = ThisWorkbook.Worksheets("BİLGİLER")
Set s2 = ThisWorkbook.Worksheets("LİSTE")

For i = 2 To s2.Cells(Rows.Count, "C").End(xlUp).Row
    If s2.Cells(i, "C") <> "" Then
        'kodlar

        'kodlar

        '

        '

        For j = 71 To 73

            If s1.Cells(j, "A") <> "" Then

                'kodlar

                'kodlar

                '

                '

            End If

        Next j

    End If

Next i
 
Üst