• DİKKAT

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

VBA Printout Problemi

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

musumek

Altın Üye
Katılım
5 Kasım 2015
Mesajlar
5
Excel Vers. ve Dili
Office 365, Türkçe
Merhabalar.
Öncelikle Excel'de makro konusunda çok tecrübesizim. Fakat kendi araştırmam ve emeklerimle güzel bir iş çıkardım. Bir "Yıllık İzin Talep Formu" düzenleme programı yaptım. Sonra bunu geliştirdim durdum. Şimdi bir Excel dosyası içinde hem "Yıllık İzin Talep Formu"m var. Hem "Taahhütlü Yıllık İzin Talep Formu"m var. Hem "Yıllık İzin Ödeme Formu"m var. Hem de "Günlük İzin Talep Formu"m var. Şimdi Yıllık İzin, Yıllık İzin ve Ödeme 1 sayfada(Microsoft Excel Objects altında sayfanın adı : Sayfa3). Bazı değişkenlere göre formun içeriği değişiyor. Taahhütlü Yıllık İzin Talep Formu başka bir sayfada(Microsoft Excel Objects altında sayfanın adı : Sayfa7). Günlük İzin Talep Formu için de başka bir sayfa kullanıyorum(Microsoft Excel Objects altında sayfanın adı : Sayfa1). Bunlara 3 ayrı Command Button ile yazıcı erişimi sağlıyorum. Benim problemim şu. Command Buton'a öyle bir makro yazayım ki "Yazdır" butonuna bastığım zaman bana ne lazımsa gitsin onu yazsın. Yani aslında isteğim şu : Eğer A24 hücresinin değeri "1" ise "Yıllık İzin" yazdırsın. "2" ise "Taahhütname" sayfasını yazdırsın. "3" ise "Günlük İzin" sayfasını yazdırsın. Bu arada 3 sayfa da "Yazdırma Alanı" belirlenmiş durumda. Command Button'a bu görevi nasıl atayabilirim? Burada yapmak istediğim şey yazdırmak için kullandığım 3 tane Command Button'u teke düşürmek. Ekli gönderdiğim fotolarda 3 tane "Seçenek Düğmesi" var. "Yıllık İzin", "Ödeme", "Günlük İzin" diye. "Yıllık İzin"i seçerseniz A24 hücresi değeri (Ben A24'ü uygun gördüm. ;;; ile Sakladım) 1 oluyor. Diğerlerinde de 2 ve 3. Ben bu değişkenlere göre ayrı ayrı sayfalardaki şablonlara tek buton ile yazı göndermek istiyorum. Eklerle anlatmaya çalıştım. Belki oldu belki olmadı.
 

Ekli dosyalar

  • Yıllık İzin Talep Formu.jpg
    Yıllık İzin Talep Formu.jpg
    215.1 KB · Görüntüleme: 19
  • Yıllık İzin Talep Formu 1.2.jpg
    Yıllık İzin Talep Formu 1.2.jpg
    131.3 KB · Görüntüleme: 21
  • Taahhütlü Yıllık İzin Talep Formu 1.1.jpg
    Taahhütlü Yıllık İzin Talep Formu 1.1.jpg
    203.7 KB · Görüntüleme: 16
  • Taahhütlü Yıllık İzin Talep Formu 1.2.jpg
    Taahhütlü Yıllık İzin Talep Formu 1.2.jpg
    206.6 KB · Görüntüleme: 14
  • Ödeme Yıllık İzin Talep Formu 1.1.jpg
    Ödeme Yıllık İzin Talep Formu 1.1.jpg
    209.4 KB · Görüntüleme: 13
  • Ödeme Yıllık İzin Talep Formu 1.2.jpg
    Ödeme Yıllık İzin Talep Formu 1.2.jpg
    134.2 KB · Görüntüleme: 13
  • Günlük İzin Talep Formu 1.1.jpg
    Günlük İzin Talep Formu 1.1.jpg
    207.9 KB · Görüntüleme: 15
  • Günlük İzin Talep Formu 1.2.jpg
    Günlük İzin Talep Formu 1.2.jpg
    162.9 KB · Görüntüleme: 13
?
Kod:
If Range("A24").Value = 1 Then
    Worksheets.("Sayfa3").PrintOut
ElseIf Range("A24").Value = 2 Then
    Worksheets.("Sayfa7").PrintOut
ElseIf Range("A24").Value = 3 Then
    Worksheets.("Sayfa1").PrintOut
End If
 
Private Sub CommandButton1_Click()

If Sheets("Ana Sayfa").[A24] = 4 Then
Sheets("Taahhütname").Select
Application.Dialogs(xlDialogPrinterSetup).Show
Sheets("Taahhütname").Range("a1:W45").PrintOut
Else

If Sheets("Ana Sayfa").[A24] = 1 Then
Sheets("Yazdır").Select
Application.Dialogs(xlDialogPrinterSetup).Show
Sheets("Yazdır").Range("a1:u33").PrintOut
Else

If Sheets("Ana Sayfa").[A24] = 2 Then
Sheets("Ödeme").Select
Application.Dialogs(xlDialogPrinterSetup).Show
Sheets("Ödeme").Range("a1:u33").PrintOut
Else

If Sheets("Ana Sayfa").[A24] = 3 Then
Sheets("Günlük İzin").Select
Application.Dialogs(xlDialogPrinterSetup).Show
Sheets("Günlük İzin").Range("a1:v37").PrintOut


End If
End If
End If
End If
End Sub

Bu şekilde çözdüm problemimi. Yazdırdıktan sonra "Ana Sayfa"ya dönmüyor. Yazdırdığı sayfada kalıyor. Bunu çözemedim. Bir de sayfaları gizlersem yazmıyor.
 
birinci önerim ne işe yaradığını, hangi komutları gerçekleştirdiğini bilmediğiniz hiç bir kodu kullanmayın.
bu nedenle, ikinci önerim, hemen bir makro eğitimi almanız.
kayıt makrosu bir nebze çare olur.

bunları söyledikten sonra, çok sınırlı sayıdaki durum ve yöntem dışında, bir nesne (object) ile çalışmak için onu seçmek gerekmez.
hatta seçmemeliyiz. en hafif kodun hızını yavaşlatır.

yazdırma alanı belirlendi dediğiniz için ben doğrudan Sheet.PrintOut metodunu kullandım.

çok koşullu yapılarda ElseIf seçeneğini kullanmak hayatı kolaylaştırır. benim yazdığım kısma bakarsanız rahatlıkla anlarsınız aslında.
(aslında Select Case çok daha uygundur.)

eğer gizli sayfa var ise gizliliğini kaldırıp print almak ve tekrar gizlemek gerekir.
 
zaten kodu Ana Sayfa'da çalıştırıyorsunuz.
Aşağıdaki kodun yeterli olması lazım.

Kod:
Private Sub CommandButton1_Click()
    
    If Range("A24").Value = 4 Then Sheets("Taahhütname").Range("A1:W45").PrintOut
    If Range("A24").Value = 1 Then Sheets("Yazdır").Range("A1:U33").PrintOut
    If Range("A24").Value = 2 Then Sheets("Ödeme").Range("A1:U33").PrintOut
    If Range("A24").Value = 3 Then Sheets("Günlük İzin").Range("A1:V37").PrintOut

End Sub
 
Geri
Üst