Makro ile istenilen sayfaları yazdırma (yardım)

Katılım
27 Kasım 2008
Mesajlar
11
Excel Vers. ve Dili
2003 türkçe
Selamlar,

Yazdığım kod aşağıda, bir yerde takıldım. Yapmak istediğim şey ;
Eğer B7, B64 ve B121 hücreleri dolu ise ilk 3 sayfayı
B7 ve B64 dolu ise ilk 2 sayfayı
B7 dolu ise ilk sayfayı yazdırmak
Butona tıkladığımda koşullar ne olursa olsun ilk 3 sayfayı yazdırıyor. Nerde hata yapıyorum?


Kod:
Private Sub CommandButton1_Click()
    If Worksheets("Sayfa1").Range("B7,B64,B121").Value = "" Then
       Sayfa1.PrintOut From:=1, To:=3, Copies:=2
        MsgBox ("3 Sayfa Yazdı")

    ElseIf Worksheets("Sayfa1").Range("B7,B64").Value = "" Then
       Sayfa1.PrintOut From:=1, To:=2, Copies:=2
        MsgBox ("2 Sayfa Yazdı")
    
    ElseIf Worksheets("Sayfa1").Range("B7").Value = "" Then
       Sayfa1.PrintOut From:=1, To:=1, Copies:=2
        MsgBox ("1 Sayfa Yazdı")
   End If
End Sub
 
Son düzenleme:
Katılım
24 Nisan 2005
Mesajlar
3,672
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
Bu şekilde dener misiniz. Range bilgilerini çalışmanıza göre düzenlersiniz.

C#:
Private Sub yazdirbtn()
    If WorksheetFunction.CountA(Worksheets("Sayfa1").Range("B1:B3")) = 3 Then
        Sheets(1).PrintOut From:=1, To:=3, Copies:=2
        MsgBox ("3 Sayfa Yazdı")
  
    ElseIf WorksheetFunction.CountA(Worksheets("Sayfa1").Range("B1:B2")) = 2 Then
        Sheets(1).PrintOut From:=1, To:=2, Copies:=2
        MsgBox ("2 Sayfa Yazdı")
  
    ElseIf WorksheetFunction.CountA(Worksheets("Sayfa1").Range("B1")) = 1 Then
        Sheets(1).PrintOut From:=1, To:=1, Copies:=2
        MsgBox ("1 Sayfa Yazdı")
    End If
End Sub
 
Katılım
27 Kasım 2008
Mesajlar
11
Excel Vers. ve Dili
2003 türkçe
Bu şekilde dener misiniz. Range bilgilerini çalışmanıza göre düzenlersiniz.

C#:
Private Sub yazdirbtn()
    If WorksheetFunction.CountA(Worksheets("Sayfa1").Range("B1:B3")) = 3 Then
        Sheets(1).PrintOut From:=1, To:=3, Copies:=2
        MsgBox ("3 Sayfa Yazdı")
 
    ElseIf WorksheetFunction.CountA(Worksheets("Sayfa1").Range("B1:B2")) = 2 Then
        Sheets(1).PrintOut From:=1, To:=2, Copies:=2
        MsgBox ("2 Sayfa Yazdı")
 
    ElseIf WorksheetFunction.CountA(Worksheets("Sayfa1").Range("B1")) = 1 Then
        Sheets(1).PrintOut From:=1, To:=1, Copies:=2
        MsgBox ("1 Sayfa Yazdı")
    End If
End Sub

Maalesef olmadı. Hata da vermedi ama
 
Katılım
24 Nisan 2005
Mesajlar
3,672
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
Ardışık olmayınca sorun oldu. Deneyiniz.

C++:
Private Sub yazdirbtn()
    If Range("B7") <> "" And Range("B64") <> "" And Range("B121") <> "" Then
        Sheets(1).PrintOut From:=1, To:=3, Copies:=2
        MsgBox ("3 Sayfa Yazdı")
   
    ElseIf Range("B7") <> "" And Range("B64") <> "" Then
        Sheets(1).PrintOut From:=1, To:=2, Copies:=2
        MsgBox ("2 Sayfa Yazdı")
   
    ElseIf Range("B121") <> "" Then
        Sheets(1).PrintOut From:=1, To:=1, Copies:=2
        MsgBox ("1 Sayfa Yazdı")
    End If
End Sub
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,330
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bahsettiğiniz hücrelerde formül var mı? Varsa paylaşınız.
 
Katılım
27 Kasım 2008
Mesajlar
11
Excel Vers. ve Dili
2003 türkçe
Hayır formül yok. B sütununa elle veri giriliyor.
Toplamda 3 sayfalık veri
1. sayfa B7den, 2. sayfa B64den, 3.sayfa B121 den başlıyor.
Eğer B121 dolu ise ilk 3 sayfayı, B64 dolu ise ilk 2 sayfayı, B7 dolu ise ilk sayfayı yazdırmak istiyorum.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,330
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Deneyiniz.

C++:
Option Explicit

Private Sub CommandButton1_Click()
    With Sheets("Sayfa1")
        If .Range("B121") <> "" Then
            .PrintOut From:=1, To:=3, Copies:=2
            MsgBox ("3 sayfa yazdırıldı.")
        
        ElseIf .Range("B64") <> "" Then
            .PrintOut From:=1, To:=2, Copies:=2
            MsgBox ("2 sayfa yazdırıldı.")
        
        ElseIf .Range("B7") <> "" Then
            .PrintOut From:=1, To:=1, Copies:=2
            MsgBox ("1 sayfa yazdırıldı.")
        End If
    End With
End Sub
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Olmadı ve yine olmadı demeniz sorunu çözmek isteyenlere bir fayda sağlamıyor maalesef. Sunulan çözümler, verdiğiniz bilgilere göre muhtelemen denenerek oluşturulmuştur ve verdiğiniz bilgilere uygun olarak çalıştığı görüldükten sonra paylaşılmıştır. Eğer istediğiniz sonucu alamıyorsanız sorunun çözümünde önemli olan bazı noktaları aktarmayı unutmuş ya da önemsememiş olabilirsiniz.

Bu nedenle sadece kuru kuru "olmadı" demek yerine neden olmadığını test edebileceğimiz örnek dosya paylaşmanızı öneririm.
 
Katılım
27 Kasım 2008
Mesajlar
11
Excel Vers. ve Dili
2003 türkçe
Evet benim hatam aynı sayfa üzerinde defalarca çalışmaktan gereksiz kodlar yüzünden çalışmıyormuş.
Yeni bir çalışma sayfasında Korhan Ayhan beyin kodlarını yazınca çalıştı.
Rahatsızlık verdiğim için özür ve teşekkür ederim
 
Üst