• DİKKAT

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

Sayfa silme

magnesia

Yasaklı üye
Katılım
1 Ocak 2018
Mesajlar
351
Excel Vers. ve Dili
Excel 2010 Türkçe
Arkadaşlar selam.

Private Sub CommandButton1_Click()

Cevap = MsgBox("Dikkat...!!! İçinde Veri Olan Sayfalar Yazdırılacaktır. Onaylıyor musunuz ?", vbYesNo, "AAAAAA")

If Cevap = vbNo Then Exit Sub
Dim syf As Worksheet
For Each syf In ThisWorkbook.Worksheets
If syf.Range("Z10").Value <> "" Then syf.PrintOut
Next
End Sub

kodlarıyla, dosya içerisinde bulunan yüzlerce sayfadan, Z10 hücresinde veri olan tüm sayfaların çıktısını alıyorum.

İsteğim şu :

Sistem bana;

"Dikkat...!!! İçinde Veri Olan Sayfalar Yazdırılacak, Veri Olmayan Sayfalar Silinecektir. Onaylıyor musunuz ?", vbYesNo, "AAAA"
şeklinde tek sefer sorup Evet onayını aldıktan sonra, Z10 hücresi dolu olan sayfaların çıktısını alsın, Z10 hücresi boş olan tüm sayfaları silsin.
Umarım anlatabilmişimdir.
Şimdiden teşekkürler.
 
Deneyin.
Kod:
Private Sub CommandButton1_Click()
Cevap = MsgBox("Dikkat...!!! İçinde Veri Olan Sayfalar Yazdırılacak, Veri Olmayan Sayfalar Silinecektir. Onaylıyor musunuz ?", vbYesNo, "AAAA")
If Cevap = vbNo Then Exit Sub
Dim syf As Worksheet
For Each syf In ThisWorkbook.Worksheets
If syf.Range("Z10").Value <> "" Then syf.PrintOut
Application.DisplayAlerts = False
If syf.Range("Z10").Value = "" Then syf.Delete
Application.DisplayAlerts = True
Next
End Sub
 
Merhaba.

Mevcut kod'daki For.... satırının hemen üstüne aşağıdaki ilk satırı, Next satırının hemen altına aşağıdaki ikinci satırı,
Next satırının hemen üstüne de aşağıdaki üçüncü satırı eklemeniz yeterli gibi görünüyor.
Rich (BB code):
Application.DisplayAlerts = False
Application.DisplayAlerts = True
If syf.Range("Z10").Value = "" Then syf.Delete
 
Sayın Turist ve sayın Ömer Baran üstadlarım.
Öncelikle ilginize ve emeğinize teşekkürler..
Sayın Turist.
Bu kodların olduğu buton, "Yazdırma-Silme isimli bir sayfada bulunuyor.
Sizin kodları çalıştırdığımda ekte ekran görüntüsünü (turist.png) verdiğim hatayı veriyor ve sayfaları yazıcıya göndermeden sadece butonun olduğu sayfayı siliyor.
Sayın Ömer Baran.
Sizin kodları çalıştırdığımda ekte ekran görüntüsünü (ömer.png) verdiğim hatayı veriyor ve sayfaları yazıcıya göndermeden sadece en sondaki sayfayı bırakıyor ve 200'ün üzerindeki diğer tüm sayfaları siliyor.
Tekrar incelerseniz sevinirim.
Tekrar teşekkürler.
 

Ekli dosyalar

  • ömer.png
    ömer.png
    3.6 KB · Görüntüleme: 4
  • Turist.png
    Turist.png
    3.7 KB · Görüntüleme: 3
Kod:
Private Sub CommandButton1_Click()
Cevap = MsgBox("Dikkat...!!! İçinde Veri Olan Sayfalar Yazdırılacak, Veri Olmayan Sayfalar Silinecektir. Onaylıyor musunuz ?", vbYesNo, "AAAA")
If Cevap = vbNo Then Exit Sub
Dim syf As Worksheet
For Each syf In ThisWorkbook.Worksheets
If syf.Name <> "Yazdırma-Silme" Then
If syf.Range("Z10").Value <> "" Then syf.PrintOut
Application.DisplayAlerts = False
If syf.Range("Z10").Value = "" Then syf.Delete
Application.DisplayAlerts = True
End If
Next
End Sub
 
Sayın Turist.
Hata mesajı vermedi ama yazıcıya hiç bir sayfa yollamadan, Yazdırma-Silme sayfası hariç tüm sayfaları sildi.
 
Yine bir örnek belge eksikliği sorunu.
Sayın @turist 'in verdiği kodlarda da, benim önerimde de bir sorun yok aslında.
Son olarak Sayın @turist istisna sayfanın durumunu da netleştirmiş ve herhangi bir sorun olmadan işlemin gerçekleşiyor olması lazım.
.
 
Sayın Ömer Baran.
Bilemeyeceğim.. Kodları aynen uyguladım ama sonuç yukarıda yazdığım gibi, sadece Yazdırma-Silme sayfası hariç tüm sayfalar silindi
 
Yine, kodların içerisinde olduğu bir örnek belge eklemediniz ve
malesef belge hazırlama işini de üstüme yıktınız.
Belge ekte.
 

Ekli dosyalar

Ömer Bey.
Şaşılacak bir durum..
Sizin dosyayı çalıştırdım, tam istediğim sonuç.
Aldım o kodları benim dosyamdaki butona aktardım, sonuç aynı.. Yazdırma-Silme sayfası hariç tüm sayfalar silindi.
Orijinal dosyada şirketle ilgili çok bilgiler var.. Temizleyip eklemeye çalışacağım.
 

Ekli dosyalar

Tekrar merhaba.
Kod'u aşağıdaki gibi kullandığımda;
-- AZ1 ve B 1 sayfaları yazdırılıyor,
-- AZ 2 sayfası siliniyor
ve sonuçta Yazdırma-Silme, AZ 1 ve B 1 sayfaları silinmeden kalıyor.

NOT: Cevap.... satırının üstündeki satır, belki bir önceki işlem ile DisplayAlert ayarı False olarak kalmıştır diye tedbiren eklendi.
Rich (BB code):
Private Sub CommandButton1_Click()

Application.DisplayAlerts = True

Cevap = MsgBox("Dikkat...!!! İçinde Veri Olan Sayfalar Yazdırılacaktır. Onaylıyor musunuz ?", vbYesNo, "AAA")

If Cevap = vbNo Then Exit Sub
Dim syf As Worksheet
For Each syf In ThisWorkbook.Worksheets
    If syf.Name <> "Yazdırma-Silme" Then
    If syf.Range("Z10").Value <> "" Then syf.PrintOut
        Application.DisplayAlerts = False
            If syf.Range("Z10").Value = "" Then syf.Delete
        Application.DisplayAlerts = True
    End If
Next

End Sub
 
Ömer Bey şu an beynim durmuş durumda.
Size gönderdiğim kısaltılmış dosyaya kodları uyguluyorum, sonuç tam istediğim gibi..
Sonra bu kodları, 200 sayfadan oluşan orijinal dosyaya uyguluyorum, sonuç felaket.. Yazdırma-Silme sayfası hariç tüm sayfalar siliniyor.
 
Bence Z10 hücrelerini bir kez daha kontrol edin.
Belgenizde çok fazla hücre birleştirmeleri olduğundan belki hücre adresi sizi yanıltıyor olabilir.

Önce alt taraftan YazdırmaSilme sayfası dışındaki bir sayfanın adına tıklayın, ardından da CTRL tuşu basılı durumdayken,
YazdırmaSilme sayfası dışındaki tüm sayfaların isimlerine fareyle birer kez tıklayarak ilgili sayfa adlarının tümünün seçilmesini sağlayın.

Son olarak da tüm sayfalarda birden boş olması kesin olan uygun bir hücreye fareyle tıklayıp =Z10="" yazıp ENTER tuşuna basın.
Ardından da tüm sayfalarda gezinti yaparak formül yazdığınız hücredeki sonucun DOĞRU/YANLIŞ durumunu kontrol edin.
Sonucu DOĞRU olan sayfalar silinecek olanlar, YANLIŞ olanlar yazdırılacak olanlar.
 
Ömer Bey.
Dediğinizi yaptım hepsi DOĞRU yazdı..
Z10 hücresinde;
=EĞER(N10="";"";"Arıza giderildi, tezgah çalışıyor.") şeklinde formül var..
Acaba kodlar, bu hücreleri dolu görüyor ve tüm sayfaları o yüzden mi siliyor?
 
Ben kod'u aşağıdaki gibi denediğimde kod;
N10 hücresi boş ise ( AZ10 hücresindeki formül bu hücreye bakıyor çünkü) AZ10'u BOŞ görüyor,
N10 dolu ise AZ10'da formüldeki cümle oluşuyor ve DOLU görüyor.

Yani sorun yok bence.
Rich (BB code):
Private Sub CommandButton1_Click()

Application.DisplayAlerts = True

Cevap = MsgBox("Dikkat...!!! İçinde Veri Olan Sayfalar Yazdırılacaktır. Onaylıyor musunuz ?", vbYesNo, "AAA")

If Cevap = vbNo Then Exit Sub
Dim syf As Worksheet
For Each syf In ThisWorkbook.Worksheets
    If syf.Name <> "Yazdırma-Silme" Then
    If syf.Range("Z10").Value <> "" Then MsgBox syf.Name & " YAZDIRILACAK"
        Application.DisplayAlerts = False
            If syf.Range("Z10").Value = "" Then MsgBox syf.Name & " SİLİNECEK"
        Application.DisplayAlerts = True
    End If
Next

End Sub
 
Ömer Bey.
Sadece msgbox çıktı, yazdırılacak ya da silinecek dedi, Hepsine tamam dedim fakat ne yazdırma ne de silme işlemini yaptı.
Ayrıca, 300'e yakın sayfayı üşenmedim tek tek tamam dedim.. Bunu kaldırmanın yolu var mı?
Yazdırılacak ve silinecekleri toplu listeleyip tamam desek daha güzel olacak gibi,
 
Ben durumu kontrol etmek için o şekilde değiştirdim kod'u.
biliyorum silme vs işlemi yapılmayacağını.
Kod'u düğmeye tıklayarak değil, VBA ekranında iken F8 düğmesine tıklayarak adım adım çalıştırırsanız, dolu olduğu halde boş gördüğü sayfanın hangisi olduğunu görebilesiniz diye o şekilde kod oluşturdum.
 
Önce silinmemesi gereken bir sayfayı görünür yapın,
kodların bulunduğu VBA ekranını açın ve F8 tuşuna aralıklarla basarak kod'u adım adım çalıştırın.
Silinmemesi gerektiğini düşündüğünüz ama kod'un SİLİNECEK uyarısını verdiği sırada VBA ekranını bırakın kalsın ve ilgili sayfaya geçip Z10 hücresini kontrol edin.
Başka nasıl tarif edilir bilemedim doğrusu.
 
Hiçbirinde hata vermedi. Silineceklere "silinecek", yazdırılacaklara da "yazdırılacak"yazdı
 
Geri
Üst