• DİKKAT

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

Hücre Değeri 0 dan Büyükse Sayfayı Yazdır Mümkünmü

  • Konbuyu başlatan Konbuyu başlatan 3641
  • Başlangıç tarihi Başlangıç tarihi

3641

Altın Üye
Katılım
22 Mayıs 2006
Mesajlar
134
Arkadaşlar günaydın,

Şöyle bir sorum olacak,
Kitap içerisinde farklı isimlere sahip 20 - 25 sayfa mevcut bu sayfalardan bazılarını gün içerisinde print ediyorum, Makro ile Sayfadaki Hücre Değeri 0 dan Büyükse Sayfayı Yazdır demek mümkün mü acaba,

Yardımlarınız için şimdiden teşekkür ederim.
 
Merhaba
ThisWorkbook'a yazacağınız aşağıdaki kod işinizi görür mü?
Kod:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Range("a1") > 0 Then
    ActiveWindow.SelectedSheets.PrintOut Copies:=Range("a1")
End If
End Sub
Sayfa değiştikçe, aktif sayfanın A1 hücresindeki sayı kadar yazdırır.

Bu şekilde olursa A1 de kullanılabilir veri varsa kod çalışır. 0, harf veya özel karakter varsa hata mesajı vermez.
Kod:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Error Resume Next
ActiveWindow.SelectedSheets.PrintOut Copies:=Range("a1")
End Sub

Kullanışlı bir yöntem olmadığını belirtmek isterim.
Her sayfa değişiminde kod tetiklenir. A1 deki sayıyı silmeyi unutursanız gereksiz bir çok çıktı almak durumunda kalırsınız.
Sayfa değişiminde yazdırmak için onay ekranı koysanız daha doğru olur gibi ancak, bu durumda da madem bir seçim yapacaksanız, bu, yazdır onayı olması yerine, yazılmasını istiyorsanız doğrudan yazdır demek daha iyi değil mi?
 
Sayın uzmanamele Örnek dosya ekledim incelemeniz mümkünmü acaba,
 

Ekli dosyalar

Merhaba

Bunu dener misiniz*
Kod:
Private Sub CommandButton1_Click()
Dim iloop As Integer
For iloop = 1 To ListBox1.ListCount
If ListBox1.Selected(iloop - 1) = True Then
If Sheets(iloop).Range("m1").Value > 0 Then
Sheets(ListBox1.List(iloop - 1, 0)).PrintOut
End If
ListBox1.Selected(iloop - 1) = False
End If
Next
End Sub
 
Merhaba
Eksik olan Userform açıldığında liste eklenmemiş olması
Kod:
Private Sub UserForm_Initialize()
Dim sSheet
For Each sSheet In Sheets
ListBox1.AddItem sSheet.Name
Next sSheet
End Sub
İlk dosyanızdaki kodu ilave ederek deneyin.
 
Sayın uzmanamele Dediğinizi yaptım, ama değişiklik olmadı

Merhaba
Çıktı alarak denemiyorum doğal olarak.
Sanki bende oldu gibi.

Kısaca mantık şu; yazdırmak için sayfalar kod ile seçildiğinde; seçilen sayfanın m1 hücresine bakıp karar verecek. M1 hücresi sayı içeriyorsa yaz, değilse diğer sayfaya geç gibi.
 
Sayın uzmanamele sizi çok uğraştırım farkındaydım, hakkınızı helal edin lütfen,
dediklerinizi yaptım göndermiş olduğunuz kodları ekledim,

Anladığım kadarıyla Form üzerinde yazdırılacak sayfaları seçtiğimde "m1" hücerisde değer olanları yazacak ama işaretli tüm sayfaları yazdırıyor.

Yapmaya çalıştığım kısaca özetlemek gerekirse;
Kullanıcı print etmek istediğinde açılan formdan içinde değer olan sayfaları aklında tutarak CheckBox 'lara tik atarak yazdır diyor, Değer olan sayfaların akılda tutulması 3 - 5 sayfada sıkıntı olmamakla beraber sayfa sayısı artıkça bu sayfada değer varmı acaba sorusunu akla getiriyor, Kullanıcı ya fazla sayfa çıktısı alıp üstüne sağlık pdf'e çeviriyor yada eksik sayfa alıp pdf'e çeviriyor. yapmaya çalıştığım tüm bu süreci kontrol altına alıp, kullanıcının hata yapma olasılığını düşürmek,

1. Yöntem UserForm üzerinde CheckBox / yanında sayfa adı / Sayfanın m1 hücresindeki değeri yanında tutar gösterip kontrol altına almak olabilir, böylece kullanıcı UserForm üzerinde Sayfa adı yanında değer görürse CheckBox tikini atarak çıktı alır ve yanılma payı ortadan kalkar ( Bu yöntem bana daha zor göründüğü için işin biraz kolay yoluna kaçtım 2. yöntemle )

Kolay diye düşündüğüm ;
2. Yöntem ise kullanıcı yazdır dediğinde sayfalardaki "m1" hücresini kontrol edip Eğer hücre değeri 1 den veya büyükse o sayfaları otomatik yazıcıya göndermekti.


Saygılarımla,
 

Ekli dosyalar

Sayın uzmanamele sizi çok uğraştırım farkındaydım, hakkınızı helal edin lütfen,
dediklerinizi yaptım göndermiş olduğunuz kodları ekledim,

Anladığım kadarıyla Form üzerinde yazdırılacak sayfaları seçtiğimde "m1" hücerisde değer olanları yazacak ama işaretli tüm sayfaları yazdırıyor.

Yapmaya çalıştığım kısaca özetlemek gerekirse;
Kullanıcı print etmek istediğinde açılan formdan içinde değer olan sayfaları aklında tutarak CheckBox 'lara tik atarak yazdır diyor, Değer olan sayfaların akılda tutulması 3 - 5 sayfada sıkıntı olmamakla beraber sayfa sayısı artıkça bu sayfada değer varmı acaba sorusunu akla getiriyor, Kullanıcı ya fazla sayfa çıktısı alıp üstüne sağlık pdf'e çeviriyor yada eksik sayfa alıp pdf'e çeviriyor. yapmaya çalıştığım tüm bu süreci kontrol altına alıp, kullanıcının hata yapma olasılığını düşürmek,

1. Yöntem UserForm üzerinde CheckBox / yanında sayfa adı / Sayfanın m1 hücresindeki değeri yanında tutar gösterip kontrol altına almak olabilir, böylece kullanıcı UserForm üzerinde Sayfa adı yanında değer görürse CheckBox tikini atarak çıktı alır ve yanılma payı ortadan kalkar ( Bu yöntem bana daha zor göründüğü için işin biraz kolay yoluna kaçtım 2. yöntemle )

Kolay diye düşündüğüm ;
2. Yöntem ise kullanıcı yazdır dediğinde sayfalardaki "m1" hücresini kontrol edip Eğer hücre değeri 1 den veya büyükse o sayfaları otomatik yazıcıya göndermekti.


Saygılarımla,

Merhaba
Sayfa1 ve Sayfa3'ün m1 hücresinde 1000 yazıyorken, UserForm'dan tüm sayfaları seçip kodu çalıştırdığımda istenilen sonucu aldığımızı sanıyorum.
Çıktı alarak göremediğim için fazla yorum yapamayacağım ama bir daha deneseniz.
Kod:
Private Sub CommandButton1_Click()
Dim iloop As Integer
For iloop = 1 To ListBox1.ListCount
If ListBox1.Selected(iloop - 1) = True Then
If Sheets(iloop).Range("m1").Value > 0 Then
Sheets(ListBox1.List(iloop - 1, 0)).PrintOut
MsgBox Sheets(iloop).Name & " yazıldı"
End If
ListBox1.Selected(iloop - 1) = False
End If
Next
End Sub

Not:
Mevcut kodlar üzerinden hareket ettiğim için fazla yorum yapamayacağım.
Başka seçenek mutlaka vardır.
 
Merhaba,
Son kod ile denediğimde Sayfayı Yazdır dediğimde işaretli tüm sayfaları "m1" hücresini dikkate almadan tik atılan tüm sayfaları yazıyor.

Son kod ile sayfa önizleme dediğimde "m1" hücresini dikkate alıp hücre içerisinde değer olanları önizleme yapıyor fakat önizleme + yazdır dediğimde tümünü yazdırıyor,

Mümkünse şayet sizinde daha fazla değerli vaktinizi almadan UserForm üzerinde sayfa isimleri yanına "m1" hücresindeki değeri çekebilirmiyiz acaba.
 
Merhaba,
Son kod ile denediğimde Sayfayı Yazdır dediğimde işaretli tüm sayfaları "m1" hücresini dikkate almadan tik atılan tüm sayfaları yazıyor.

Son kod ile sayfa önizleme dediğimde "m1" hücresini dikkate alıp hücre içerisinde değer olanları önizleme yapıyor fakat önizleme + yazdır dediğimde tümünü yazdırıyor,

Mümkünse şayet sizinde daha fazla değerli vaktinizi almadan UserForm üzerinde sayfa isimleri yanına "m1" hücresindeki değeri çekebilirmiyiz acaba.

Merhaba
Burada sıkıntı olmaması lazım, sorun nedir anlayamıyorum.
Kod:
Private Sub CommandButton1_Click()
Dim iloop As Integer
For iloop = 1 To ListBox1.ListCount
If ListBox1.Selected(iloop - 1) = True Then
If Sheets(iloop).Range("m1").Value > 0 Then
Sheets(ListBox1.List(iloop - 1, 0)).PrintOut
MsgBox Sheets(iloop).Name & " yazıldı" & ", M1 Değeri: " & Sheets(iloop).Range("m1").Value
End If
ListBox1.Selected(iloop - 1) = False
End If
Next
End Sub
 
Sayın uzmanamele,
Son kod ile sorun çözüldü.

Göstermiş olduğunuz anlayış ve yardımlarınız için teşekkür ederim,

Saygılarımla,
 
Sayın uzmanamele,
Son kod ile sorun çözüldü.

Göstermiş olduğunuz anlayış ve yardımlarınız için teşekkür ederim,

Saygılarımla,

Merhaba

Sorun değil, güle güle kullanın.
Da, bunun öncekilerden farkı yoktu ki?
Sadece Msgbox ekranında, hangi sayfa yazdırılıyor ve o sayfanın m1 hücresindeki değer görünüyor.

Öncekilerde sorun neydi ben de anlayamadım.
 
Geri
Üst