• DİKKAT

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

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:
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
 
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
 
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
 
Bahsettiğiniz hücrelerde formül var mı? Varsa paylaşınız.
 
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.
 
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
 
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.
 
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
 
Geri
Üst