Genel Bakış
PrintOut (Worksheet.PrintOut method), bir çalışma sayfasının yazdırılmasını VBA kodundan başlatan yöntemdir. Kopya sayısı, sayfa aralığı, önizleme, yazıcı ve dosyaya yazdırma gibi seçenekleri kod içinden belirlemenizi sağlar. Aynı yöntem Workbook, Range, Chart ve Window nesnelerinde de bulunur.
Burada ifade, bir Worksheet nesnesini gösteren ifadedir (ör. ActiveSheet ya da Worksheets("Rapor")). Parametreler:
Yöntem şu nesnelerde de vardır: Workbook.PrintOut (tüm kitap), Range.PrintOut (yalnız seçili aralık), Chart.PrintOut (grafik sayfası) ve Sheets.PrintOut (birden çok sayfa). Tek tek sayfa seçmek için Worksheets(Array("Ocak", "Şubat")).PrintOut biçimi kullanılabilir.
Preview değeri True olduğunda önizleme penceresi kapanana kadar makro bekler; kullanıcı yazdır düğmesine basmazsa çıktı alınmaz.
Makro çalıştırıldığında Satış Listesi sayfası etkin yazıcıya iki kopya olarak gönderilir. Collate parametresi True olduğu için kopyalar sayfa sırasıyla, yani birinci kopyanın tamamı ardından ikinci kopya biçiminde basılır. Bu örnek yazıcıya erişim gerektirdiği için burada çalıştırılmaz.
Makro çalışınca Excel önce baskı önizleme penceresini açar. Kullanıcı yazdırmayı onaylarsa yalnız 1. ve 2. sayfalar basılır. IgnorePrintAreas True verildiği için sayfada tanımlı bir yazdırma alanı olsa bile kullanılan bölgenin tamamı esas alınır.
Makro çalıştıktan sonra ilk satırın durumu D2 hücresinde Yazdırılacak olarak görünür. Adedi 0 olan satırın durumu D4 hücresinde Atlanacak biçimindedir. Kullanılan alanın adresi E2 hücresinde A1:E6 olarak yazılır; bu adres, yazdırma alanı tanımlı değilse PrintOut'un basacağı bölgeyi gösterir.
Söz dizimi
Yöntemin genel biçimi aşağıdadır. Tüm parametreler isteğe bağlıdır; hiçbiri verilmezse sayfa etkin yazıcıda bir kopya olarak tamamen yazdırılır.ifade.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName, IgnorePrintAreas)
- From: Yazdırmaya başlanacak sayfa numarası; isteğe bağlı. Verilmezse ilk sayfadan başlanır.
- To: Yazdırılacak son sayfa numarası; isteğe bağlı. Verilmezse son sayfaya kadar yazdırılır.
- Copies: Yazdırılacak kopya sayısı; isteğe bağlı. Varsayılan 1'dir.
- Preview: True ise yazdırmadan önce baskı önizleme açılır; isteğe bağlı. Varsayılan False'tur, yani doğrudan yazdırılır.
- ActivePrinter: Kullanılacak etkin yazıcının adı; isteğe bağlı. Verilmezse Excel'in etkin yazıcısı kullanılır.
- PrintToFile: True ise yazıcıya değil dosyaya yazdırılır; isteğe bağlı. Varsayılan False'tur. PrToFileName verilmezse Excel dosya adını sorar.
- Collate: True ise birden çok kopya sıralı (harmanlanmış) basılır; isteğe bağlı.
- PrToFileName: PrintToFile True iken oluşturulacak dosyanın adı; isteğe bağlı.
- IgnorePrintAreas: True ise tanımlı yazdırma alanları yok sayılır ve sayfanın tamamı yazdırılır; isteğe bağlı. Varsayılan False'tur.
Dönüş değeri ve kullanım biçimleri
PrintOut bir değer döndürmez; bu nedenle parantezsiz ve adlandırılmış bağımsız değişkenlerle çağırmak en okunaklı yoldur. Parametrelerin yerini ezberlemek yerine adlarını yazmanız hatayı azaltır:ActiveSheet.PrintOut Copies:=2, Collate:=True
Hangi alanın yazdırılacağı
Excel, sayfada Sayfa Düzeni > Sayfa Yapısı > Yazdırma Alanı (Page Layout > Page Setup > Print Area) ile tanımlı bir alan varsa yalnız o alanı yazdırır. Alan tanımlı değilse kullanılan bölgenin tamamı basılır. Sayfa yönü, kenar boşlukları, ölçekleme ve başlık satırları gibi ayarlar PageSetup nesnesinden gelir; PrintOut bu ayarları değiştirmez, olduğu gibi kullanır. From ve To değerleri satır değil, sayfa numarasıdır.Preview değeri True olduğunda önizleme penceresi kapanana kadar makro bekler; kullanıcı yazdır düğmesine basmazsa çıktı alınmaz.
1. Birden çok kopya yazdırma
Bir sayfadaki ürün satış listesinin iki kopyasını sıralı olarak yazdırmak istiyorsunuz. Kodu Ekle > Modül (Insert > Module) ile açtığınız standart modüle yapıştırın. Yazdırma işlemi çalıştırılmadığı için sonuç yalnız anlatılır.
VBA
6 satır
Option Explicit
Sub SatisListesiniYazdir()
' Sayfayı 2 kopya olarak, kopyaları sıralı basar
Worksheets("Satış Listesi").PrintOut Copies:=2, Collate:=True
End Sub
PrintOut
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ürün | Şehir | Adet | Tutar |
| 2 | Klavye | Ankara | 12 | 3.600,00 |
| 3 | Monitör | İzmir | 5 | 21.500,00 |
| 4 | Yazıcı | Bursa | 3 | 9.750,00 |
Satış ListesiExcelDepo v1.0.0
2. Sayfa aralığı ve önizleme
Uzun bir stok listesinin yalnız ilk iki sayfasını, önce önizleme göstererek yazdırmak istiyorsunuz. Kodu standart bir modüle yapıştırın. Önizleme penceresi kullanıcı etkileşimi beklediği için örnek çalıştırılmaz.
VBA
8 satır
Option Explicit
Sub StokIlkIkiSayfa()
' 1. ve 2. sayfalar, önce baskı önizleme gösterilerek yazdırılır
' IgnorePrintAreas True: tanımlı yazdırma alanı yok sayılır
Worksheets("Stok Listesi").PrintOut From:=1, To:=2, Copies:=1, _
Preview:=True, IgnorePrintAreas:=True
End Sub
PrintOut
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ürün Kodu | Ürün Adı | Depo | Stok |
| 2 | A-101 | Kalem | İstanbul | 450 |
| 3 | A-102 | Defter | Konya | 220 |
| 4 | A-103 | Dosya | Adana | 315 |
Stok ListesiExcelDepo v1.0.0
3. Yazdırmadan önce kontrol
Yazdırmaya geçmeden önce hangi satırların basılacağını işaretleyen ve kullanılan alanın adresini yazan bir hazırlık makrosu kuruyorsunuz. Adedi 0 olan satırlar atlanacaktır. Kodu standart bir modüle yapıştırın; bu makro yazıcıya erişmediği için çalıştırılabilir. Gerçek yazdırma için aynı mantığın sonuna PrintOut çağrısı eklenebilir.
VBA
23 satır
Option Explicit
Sub YazdirmaOnKontrol()
Dim ws As Worksheet
Dim i As Long
Dim son As Long
Set ws = ActiveSheet
' A sütunundaki son dolu satırı bulur
son = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' Adedi sıfırdan büyük satırları işaretler
For i = 2 To son
If ws.Cells(i, 3).Value > 0 Then
ws.Cells(i, 4).Value = "Yazdırılacak"
Else
ws.Cells(i, 4).Value = "Atlanacak"
End If
Next i
' Kullanılan alanın adresini yazar
ws.Range("E2").Value = ws.UsedRange.Address(False, False)
End Sub
PrintOut
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Ürün | Şehir | Adet | Durum | Alan |
| 2 | Masa | Ankara | 8 | Yazdırılacak | A1:E6 |
| 3 | Sandalye | İzmir | 24 | Yazdırılacak | |
| 4 | Dolap | Bursa | 0 | Atlanacak | |
| 5 | Lamba | Antalya | 15 | Yazdırılacak | |
| 6 | Raf | Konya | 6 | Yazdırılacak |
Yazdırma KontrolExcelDepo v1.0.0
Kullanırken dikkat edin
- Yazıcı bulunmayan bilgisayarlarda hata: Etkin yazıcı tanımlı değilse ya da yazıcıya ulaşılamıyorsa PrintOut çalışma zamanı hatası verir. Üretim kodunda On Error ile hatayı yakalayıp kullanıcıyı bilgilendirmeniz önerilir.
- Önce önizleme ile deneyin: Kodu geliştirirken kağıt israf etmemek için Preview parametresini True verin ya da PrintPreview yöntemini kullanın. Çıktıyı beğendikten sonra Preview değerini kaldırın.
- Yazdırma alanı ve sayfa ayarı: PrintOut sayfa yönü, ölçekleme ve başlık satırlarını PageSetup nesnesinden alır. Çıktı beklediğiniz gibi değilse önce PageSetup ayarlarını kontrol edin. Tüm sayfayı basmak için IgnorePrintAreas parametresini True yapın.
- From ve To sayfa numarasıdır: From ve To satır numarası değil, yazdırılacak sayfa numarasıdır. Sayfa sayısı sayfa kesmelerine ve ölçeklemeye göre değiştiği için aralıkları sabit yazarken dikkatli olun.
- Adlandırılmış bağımsız değişken kullanın: Dokuz parametrenin sırasını hatırlamak zordur. Copies:=2 gibi adlandırılmış bağımsız değişkenler hem hatayı azaltır hem de kodu okunaklı yapar.
- Dosyaya yazdırma: PrintToFile True verilip PrToFileName boş bırakılırsa Excel dosya adını sormak için pencere açar ve makro etkileşim bekler. Otomatik çalışacak kodlarda dosya adını da verin; ancak PDF gerekiyorsa ExportAsFixedFormat daha uygun bir yoldur.
- İlgili konular:
- PrintPreview: Yazdırmadan önce baskı önizlemeyi açan yöntem.
- PageSetup: Sayfa yönü, kenar boşlukları, ölçek ve başlık satırlarını belirleyen nesne.
- PageSetup.PrintArea: Yazdırma alanını belirleyen özellik.
- ExportAsFixedFormat: Sayfayı PDF ya da XPS olarak dışa aktaran yöntem.
- Application.ActivePrinter: Etkin yazıcıyı okuyan ve değiştiren özellik.
- HPageBreaks: Yatay sayfa kesmelerini yöneten koleksiyon.
- Dosya > Yazdır (File > Print): Aynı işlemi elle yapan arayüz komutu.