PDF'ten Sayfa Yazdırma

Astalavista58

Altın Üye
Katılım
20 Ocak 2020
Mesajlar
239
Excel Vers. ve Dili
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
20-02-2025
Öncelikle herkese merhaba,

Excel dosyamda A1 hücresinde yazan değer (111) PDF dosyamın ismi, B1 hücresinde yazan değer (10) ise PDF dosyamdaki sayfa numarası.
Örneğin, makroya tıkladığımda "111.pdf" isimli dosyanın, 10. Sayfadan 2 adet çıktı alsın istiyorum. Nasıl yapılabilir
 
Son düzenleme:

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,159
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba,

Sisteminizde ADOBE yüklü mü?
 

Astalavista58

Altın Üye
Katılım
20 Ocak 2020
Mesajlar
239
Excel Vers. ve Dili
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
20-02-2025
Doğrudur yüklü
 

Astalavista58

Altın Üye
Katılım
20 Ocak 2020
Mesajlar
239
Excel Vers. ve Dili
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
20-02-2025
ADOBE Reader DC yüklü
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,159
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Yazdırma işlemi sadece A1-B1 hücreleri için mi geçerli olacak?
 

Astalavista58

Altın Üye
Katılım
20 Ocak 2020
Mesajlar
239
Excel Vers. ve Dili
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
20-02-2025
Verilerimi düşeyara ile A1 ve B1 hücresine çektiriyorum onlar sabit kalıyor
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,159
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Aşağıdaki kodu boş bir modüle uygulayınız.

Kodun çalışması için VBA editöründe REFERENCES menüsünden aşağıdaki isimdeki kütüphane aktif hale getirilmelidir.
  • Adobe Acrobat XX.X Type Library

Ek olarak A1 hücresinde PDF dosyası yolu ile beraber yazılmalıdır. Örnek ; C:\Belgelerim\PDF Dosyaları\111.pdf

C++:
Option Explicit

Sub PDF_Dosya_Yazdir()
    Print_PDF Range("A1").Value, Range("B1").Value, Range("B1").Value
    Print_PDF Range("A1").Value, Range("B1").Value, Range("B1").Value
End Sub

Public Sub Print_PDF(Dosya_Adi As String, Baslangic_Sayfa_No As Integer, Bitis_Sayfa_No As Integer)
    Dim AcroApp As AcroApp
    Dim AcroAVDoc As AcroAVDoc
    Dim AcroPDDoc As AcroPDDoc
    
    Set AcroApp = CreateObject("AcroExch.App")
    Set AcroAVDoc = CreateObject("AcroExch.AVDoc")
    Const PostScript_Level = 2
    
    If AcroAVDoc.Open(Dosya_Adi, vbNull) <> True Then
        Exit Sub
    End If
    
    Set AcroAVDoc = AcroApp.GetActiveDoc
    Set AcroPDDoc = AcroAVDoc.GetPDDoc
    
    AcroAVDoc.PrintPages Baslangic_Sayfa_No - 1, Bitis_Sayfa_No - 1, PostScript_Level, True, False
    AcroAVDoc.Close True
    AcroApp.Exit
    
    Set AcroAVDoc = Nothing
    Set AcroPDDoc = Nothing
    Set AcroApp = Nothing
End Sub
 

Astalavista58

Altın Üye
Katılım
20 Ocak 2020
Mesajlar
239
Excel Vers. ve Dili
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
20-02-2025
Dediğiniz gibi VBA editöründe Tools>References sekmesinden, Adobe Acrobat Browser Control Type Libary ve Adobe Reader File Prewiew Type Libary sekmelerinin tiklerini aktif ettim. Execelimde A1 hücresine PDF'in bulunduğu konumu yazdım, b1 sütununa çıktı almak istediğim sayfa sayısını yazıp kodu çalıştırmaya çalıştığımda;
"Compile error:
User defined type not defined" şeklinde hata verip, "
Public Sub Print_PDF(Dosya_Adi As String, Baslangic_Sayfa_No As Integer, Bitis_Sayfa_No As Integer)" bu kod sarı renk ile yandı. Acaba nerde hata yapıyorum
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,159
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Kodu netten buldum ve biraz düzenleyip paylaştım. Bende ADOBE yüklü olmadığı için deneme şansım olmadı.

Kodun çalışması için görselde ki gibi bir referans olması gerekiyor.

225042
 

Astalavista58

Altın Üye
Katılım
20 Ocak 2020
Mesajlar
239
Excel Vers. ve Dili
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
20-02-2025
Resimdeki tüm tikleri seçenekleri bende işaretledim, sadece bende "Adobe Acrobat 10.0 Type Libary" yok, onun yerine "Adobe Acrobat Browser Control Type Libary" ve "Adobe Reader File Prewiew Type Libary 1.0" seçenekleri var. İki seçeneği de ayrı ayrı ve ikisi aynı anda olacak şekilde seçtim ancak yine aynı hatayı verdi.
 

Ekli dosyalar

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,159
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
O referansın olması için ADOBE ACROBAT yüklemeniz gerekebilir.
 

Astalavista58

Altın Üye
Katılım
20 Ocak 2020
Mesajlar
239
Excel Vers. ve Dili
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
20-02-2025
Acrobat problemini çözdüm bu sefer başka hata verdi, bu iş olacak gibi değil, ilgi alakanız için çok teşekkür ederim Korhan bey
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,159
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Hemen pes etmeyin...

Nerede hata veriyor?
 

Astalavista58

Altın Üye
Katılım
20 Ocak 2020
Mesajlar
239
Excel Vers. ve Dili
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
20-02-2025
Bu şekilde hata veriyor tamam dediğimde "Public Sub Print_PDF(Dosya_Adi As String, Baslangic_Sayfa_No As Integer, Bitis_Sayfa_No As Integer)" sarı yanıp, "Set AcroDoc = Nothing" kodunda ise "AcroDoc" seçili kalıyor
 

Ekli dosyalar

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,159
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
O kısmı ben düzenlerken hatalı bırakmışım.

#7 nolu mesajımı revize ettim. Tekrar deneyiniz.
 

Astalavista58

Altın Üye
Katılım
20 Ocak 2020
Mesajlar
239
Excel Vers. ve Dili
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
20-02-2025
Korhan hocam, Run-Time error "429" ActiveX compeant cant create object hatası verdi, debuga bastığımda; "Set AcroApp = CreateObject("AcroExch.App")" kodunu sarıya boyuyor
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,159
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Peki sisteminize ADOBE ACROBAT kurdunuz mu?
 

Astalavista58

Altın Üye
Katılım
20 Ocak 2020
Mesajlar
239
Excel Vers. ve Dili
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
20-02-2025
Korhan hocami çok teşekkür ederim, kod çalıştı, Adobe Acrobat'ı yeniden yükledim. Tekrardan çok teşekkür ederim
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,159
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Ek olarak bende çalışmama durumuna karşı SendKeys metodu ile aşağıdaki şekilde sonuca gidebildim.

Aşağıdaki kodlama Foxit Reader 8.2.0.2051 versiyon ile denenmiştir ve olumlu sonuç alınmıştır. Sisteme göre tuş basışları değişkenlik gösterebilir. Bu sebeple uyarlama yapmak gerekebilir.

C++:
Option Explicit

Sub PDF_Yazdir()
    Dim Adet As Variant
   
    If Range("A1").Value = "" Then
        MsgBox "Lütfen PDF dosyasının adını giriniz!", vbCritical
        Range("A1").Select
        Exit Sub
    End If

    If Range("B1").Value = "" Then
        MsgBox "Lütfen yazdırmak istediğiniz sayfanın numarasını giriniz!", vbCritical
        Range("B1").Select
        Exit Sub
    End If

    Adet = InputBox("Çıktı sayısını giriniz...", "ÇIKTI ADEDİ", 2)
   
    If Adet = "" Then
        MsgBox "Yazdırma işlemi iptal edilmiştir.", vbExclamation
        Exit Sub
    End If
   
    If Not IsNumeric(Adet) Or Adet <= 0 Then
        MsgBox "Lütfen sıfırdan büyük sayısal bir değer giriniz!", vbCritical
        Exit Sub
    End If
   
    CreateObject("Shell.Application").Open "C:\Users\Downloads\Sayfa1.pdf"
    Application.Wait Now + TimeSerial(0, 0, 3)
    SendKeys "^p", True
    SendKeys "{Tab 2}", True
    SendKeys Adet, True
    SendKeys "{Tab 4}", True
    SendKeys "{Down 1}", True
    SendKeys "{Tab 1}", True
    SendKeys Range("B1").Value & "-" & Range("B1").Value, True
    SendKeys "{Tab 10}", True
    Application.Wait Now + TimeSerial(0, 0, 3)
    SendKeys "{Enter}", True
    Application.Wait Now + TimeSerial(0, 0, 3)
    SendKeys "%{F4}", True
End Sub
 

Astalavista58

Altın Üye
Katılım
20 Ocak 2020
Mesajlar
239
Excel Vers. ve Dili
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
20-02-2025
Korhan hocam Allah sizden razı olsun, Key ile vermiş olduğunu formül PDF açıp, yazdırma ekranına kadar açıp yazıcı seçme yerinde, yazıcı olmadığından kafası karışıyor. Yarın sabah büroda yazıcılı bilgisayardan gerekli tuş ayarlamalarını yapıp deneyeceğim. O kadar işimi kolaylaştırdınız ki size ne kadar dua etsem azdır. Tekrardan çok çok teşekkür ederim.
 
Üst