Yazdırma Kodlarında Değişiklik Formülleri Yazdırmasın

Katılım
29 Haziran 2018
Mesajlar
297
Excel Vers. ve Dili
2016 TÜRKÇE
Arkadaşlar merhaba.
Sayın Ömer Baran Üstadın başka bir dosyam için hazırladığı kodu bu dosyama uyarlamaya çalıştım ama tam istediğim gibi olmadı. Kodun dosyama uygun hale gelmesi için nasıl bir değişiklik yapmalıyım.

Sub SINIF_DİŞ_ÖN_YAZDIR()
Application.ScreenUpdating = False
For sat = 3 To Sheets("YAZICI").Cells(Rows.Count, "S").End(3).Row
If Sheets("YAZICI").Cells(sat, "S") <> "" Then
Sheets("DİŞ FORMU ÖN").[AF24] = Sheets("YAZICI").Cells(sat, "S")
Sheets("DİŞ FORMU ÖN").PrintOut Copies:=1
Application.Wait (Now + TimeValue("0:00:01"))
adet = adet + 1
End If
Next
Application.ScreenUpdating = True
MsgBox adet & " öğrenci için DİŞ FORMU sayfası yazdırıldı.", , "..:: Ömer BARAN ::.."
End Sub

Bu kodla;

YAZICI isimli sayfamın L4 hücresine yazdığım sınıfın Öğrenci numaralarını

=EĞER (SATIR (B1)>EĞERSAY (VERİ!$B$1:$B$2000;$L$4);" ";İNDİS(VERİ!C$1:C$2000;KÜÇÜK (EĞER (VERİ!$B$1:$B$2000=$L$4;SATIR (A$1:A$1999));SATIR (B1))))

Formülüyle YAZICI sayfasının S2 ten itibaren S50 aralığında sıralattım.

Daha sonra S sütunundaki öğrenci numaralarını Sheets("DİŞ FORMU ÖN").[AF24] = Sheets("YAZICI").Cells(sat, "S") DİŞ FORMU ÖN sayfasının AF24 hücresine göndererek yazdırdım. Ancak.

1A sınıfı 4 kişi olmasına rağmen formül olan kalan hücreleri de boş olarak yazıcıya gönderdi. ŞİMDİ:

YAZICI sayfasındaki L4 hücresinde yazan sınıf adını VERİ sayfasında B sütununda bulup ona göre C sütunundaki numaraları Sheets("DİŞ FORMU ÖN").[AF24] hücresine gönderecek kod nasıl olmalı?

Veya olmuyorsa yukarıdaki kodun formül olan tüm hücreleri değilde sadece numara olan hücreleri göndermesi için nasıl bir değişiklik gerekiyor. Saygılar.

https://dosya.co/32mh9kui2zf4/OGRENCI_PROGRAMI_v0001.xls.html


Alıntı Cevapla
Raporla
 

Ö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,

For sat = 3 To Sheets("YAZICI").Cells(Rows.Count, "S").End(3).Row

yerine

For sat = 2 To Sheets("YAZICI").[K4] + 1

yazmanız yeterli olur.

Not: Veriler 3. satırdan değil 2. satırdan başladığı için yeni yazdığım satırda döngüyü 2 den başlattım. Düzelmesi gerekiyorsa 2 yerine 3 yazarsınız.

.
 
Katılım
29 Haziran 2018
Mesajlar
297
Excel Vers. ve Dili
2016 TÜRKÇE
Sayın Ömer Üstadım Önerdiğiniz çözüm işimi gördü. Çok teşekkür ediyorum. Allah razı olsun.

Bilgi edinmek açısından sorsam acaba öğrenci numaralarını YAZICI sayfasına almadan L4 hücresine yazılan sınıfın öğrenci numaralarını direkt VERİ sayfasından alabilirmiydik;

Aynı şekilde T sütununda listeleyip yazıcıya gönderdiğim sınıf isimlerini VERİ sayfasından almak isteseydik (her sınıf adından 1 tane olmak üzere) ne yapmak gerekirdi? Lütfedeseniz memnun olurum. Saygılar sunuyorum.
 

Ö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
2 istediğiniz de mümkün fakat ne yapılması gerektiğini tam olarak anlayamadım.

Daha detaylı açıklama yapar mısınız.
 
Katılım
29 Haziran 2018
Mesajlar
297
Excel Vers. ve Dili
2016 TÜRKÇE
Üstadım 1 nolu mesajımdaki e okul'dan excele aktarılan verilerden oluşan bir ÖĞRENCİ PROGRAMI dosyam var. Bu dosyadan değişik kriterlere göre verileri yazdırıyorum

Yazdırma işlemlerim ya sınıflar bazında mesela tüm 1. sınıflar 2. sınıflar..... veya 1A 1B gibi belirli sınıflar yahut tek öğrenci bazında olursa okul numaralarına göre değişik sayfaların değişik hücrelerine veri aktararak çıktılar alıyorum. Dosyadaki modül 5 yazıcı kodlarını biriktirdiğim modül.

YAZICI isimli sayfamın sağ tarafında bulunan ve sizin desteğinizle çözüme kavuşan L4 hücresindeki sınıf adını seçtikten sonra o sınıftaki öğrenci numaralarını DİŞ FORMU ÖN sayfasının AF24 hücresine göndermek için Bunları S sütununda dizi formülüyle belirleyip buradan gönderebildim.

Oysa ben YAZICI sayfasının L4 hücresine mesela 3A yazıp yazdır kodunu çalıştırınca 3A da okuyan öğrencileri direk VERİ sayfasından bulup okul numaralarını DİŞ FORMU ÖN sayfasının AF24 hücresine gönderebilir miydik? Saygılar
 

Ö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
Deneme yapmadım.
İstediğiniz bu mu?
Kod:
Sub Yazdir()

    Dim Sv As Worksheet, Sd As Worksheet, s As Long, c As Range, Adr As String
    
    Set Sv = Sheets("VERİ")
    Set Sd = Sheets("DİŞ FORMU ÖN")
    
    Application.ScreenUpdating = False
    
    Set c = Sv.[B:B].Find(Sheets("YAZICI").[L4], , xlValues, xlWhole)
    If Not c Is Nothing Then
        Adr = c.Address
        Do
            Sd.Range("AF24") = Sv.Cells(c.Row, "C")
            Sd.PrintOut Copies:=1
            Application.Wait (Now + TimeValue("0:00:01"))
            s = s + 1
            Set c = Sv.[B:B].FindNext(c)
        Loop While Not c Is Nothing And c.Address <> Adr
    End If
    
    Application.ScreenUpdating = True
    
    If s = 0 Then
        MsgBox "Yazdıracak Sayfa Bulamadım.", , "excel.web.tr"
    Else
        MsgBox s & " Adet Sayfa Yazdırıldı.", , "excel.web.tr"
    End If
    
End Sub
 
Katılım
29 Haziran 2018
Mesajlar
297
Excel Vers. ve Dili
2016 TÜRKÇE
Üstadım siz zahmet etmeyin ben denedim. Mükemmel çalışıyor. Ellerine sağlık. Çok teşekkür ediyorum. Saygılar sunuyorum.
 

Ö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
Rica ederim, işinize yaradığına sevindim.
Saygı bizden.
 
Üst