VBA kullanarak Excel'i PDF'ye Dönüştürme

 VBA kullanarak Excel'i PDF'ye Dönüştürme

Excel'i PDF'ye dönüştürme

Bu yazıda, her türlü Excel nesnesini PDF'lere dönüştürmek için Excel VBA'yı nasıl kullanacağınızı göstereceğim:

  • Seçimi PDF'ye Yazdır
  • Bir Tablalı PDF'ye Yazdır
  • Tüm Tabloları Ayrı PDF'lere Yazdır
  • Tüm Sayfaları Bir PDF'ye Yazdır
  • Tabloları PDF'ye Yazdır
  • Grafik Nesnelerini PDF'ye Yazdır

Makroların her birini bazı yorumlarla sunacağım. Böylece, onları hızlı bir şekilde bulabilir, VBA editörünüze kopyalayabilir ve kullanabilirsiniz.

Bu makrolardan herhangi birini çalıştırdığınızda, PDF'inizi nereye kaydetmek istediğinizi soran bir Farklı Kaydet iletişim kutusu görüntülenir. Varsayılan ad, makroyu yyyymmdd_hhmmss biçiminde yürüttüğünüz tarih ve zaman damgasını içerir.

Hemen başlayalım.

İşte makrolar:

Seçimi PDF'ye Yazdır

Bu benim kişisel favorim. Bu makro, aktif olarak seçtiğiniz hücreleri PDF'ye dönüştürür.

Yalnızca bir hücre seçtiyseniz, VBA makrosu, muhtemelen yalnızca bir hücrenin dönüştürülmesini istemediğinizi anlamak için akıllıdır; bu nedenle, dönüştürmek istediğiniz aralığı seçmenizi ister:

Alt BaskıSözleşmesiToPDF ()
'SUBROUTINE: PrintSelectionToPDF
'GELİŞTİRİCİ: Ryan Wells
'TANIM: Seçili aralığını PDF'ye yazdır
Dim ThisRng As Range
Dim strfile As String
Değişken olarak Dim myfile
Selection.Count = 1 ise
Set ThisRng = Application.InputBox ("Bir aralık seçin", "Aralığı Al", Tip: = 8)
Başka
Set ThisRng = Seçim
Son If
'Konum kaydetmek için sor
Strfile = "Seçim" & "_" _
& Biçimlendir (Şimdi (), "yyyymmdd_hhmmss") _
& ".pdf"
Strfile = ThisWorkbook.Path & "\" & strfile
Myfile = Application.GetSaveAsFilename _
(Başlangıç ​​DosyasıAdı: = strfile, _
FileFilter: = "PDF Dosyaları (* .pdf), * .pdf", _
Title: = "PDF Olarak Kaydedilecek Klasör ve Dosya Adını Seçin")
Myfile <> "Yanlış" Sonra 'PDF olarak kaydedin
ThisRng.ExportAsFixedFormat Türü: = xlTypePDF, Dosya adı: = _
Myfile, Kalite: = xlQualityStandard, IncludeDocProperties: = True, _
IgnorePrintAreas: = Yanlış, OpenAfterPublish: = True
Başka
MsgBox "Dosya Seçilmedi .PDF kaydedilemiyor", vbOKOnly, "No File Selected"
Son If
End Sub

Aralığı seçip Tamam'ı tıkladığınızda PDF'yi nereye kaydetmek istediğinizi seçebileceğiniz bir iletişim kutusu gösterecektir.

Sisteminizin saatinden otomatik olarak tarih ve saati alacak ve dosya adına ekleyecektir.

Bir Tablalı PDF'ye Yazdır

Birçok Excel güç kullanıcısı, verilerini organize tablolara depolar. Nitekim olarak, Sumit Bansal kendisi Excel tablolarını çok seviyor ve onlara Excel'de gizli bir hazine diyor .

Bu makro, seçtiğiniz bir tabloyu bir PDF'ye yazdırır. Makroyu çalıştırdığınızda, kaydetmek istediğiniz tablonun adını sorar.

Alt PrintTableToPDF ()
'SUBROUTINE: PrintTableToPDF
'GELİŞTİRİCİ: Ryan Wells
'TANIM: Seçtiğiniz bir tabloyu bir PDF'ye yazdırın
Dim strfile As String
Değişken olarak Dim myfile
Dim strTable As String, r As Aralık
Application.ScreenUpdating = Yanlış
'Kaydetmek istediğiniz tablo adını girin
StrTable = InputBox ("Kaydetmek istediğiniz tablonun adı nedir?", "Tablo Adı Girin") 'Kaydetmek istediğiniz tablo
Trim (strTable) = "" Sonra Exit Sub
'Konum kaydetmek için sor
Strfile = strTable & "_" _
& Biçimlendir (Şimdi (), "yyyymmdd_hhmmss") _
& ".pdf"
Strfile = ThisWorkbook.Path & "\" & strfile
Myfile = Application.GetSaveAsFilename _
(Başlangıç ​​DosyasıAdı: = strfile, _
FileFilter: = "PDF Dosyaları (* .pdf), * .pdf", _
Title: = "PDF Olarak Kaydedilecek Klasör ve Dosya Adını Seçin")
Myfile <> "Yanlış" Sonra 'PDF olarak kaydedin
Aralık (strTable) .ExportAsFixedFormat Türü: = xlTypePDF, Dosya adı: = myfile, Kalite: = xlQualityStandard, _
IncludeDocProperties: = True, IgnorePrintAreas: = Yanlış, OpenAfterPublish: = True
Başka
MsgBox "Dosya Seçilmedi .PDF kaydedilemiyor", vbOKOnly, "No File Selected"
Son If
Application.DisplayAlerts = Yanlış
Devam edelim:
Uygulama ile
.ScreenUpdating = Doğru
.DisplayAlerts = True
İle bitmek
Çıkış Sub
End Sub

Tablonun adını girdikten ve Tamam'ı tıkladığınızda PDF'yi nereye kaydetmek istediğinizi seçebileceğiniz bir iletişim kutusu gösterecektir.

Sisteminizin saatinden otomatik olarak tarih ve saati alacak ve dosya adına ekleyecektir.

Tüm Tabloları Ayrı PDF'lere Yazdır

E-tablonuzda birkaç tablo varsa ve her birini ayrı bir PDF'ye kaydetmeniz gerekirse, bu VBA kodunu çalıştırabilirsiniz.

Bu makroyu çalıştırdığınızda, PDF'lerinizi kaydetmek istediğiniz klasörü seçmenizi isteyen bir iletişim kutusu görüntülenir.

Klasörünüzü seçtiğinizde, makro her tabloyu bir PDF'ye kaydeder ve tablo adı uygun bir şekilde PDF başlığında görünür.

Alt PrintAllTablolarToPDF'ler ()
'ALTYAZI: PrintAllTablesToPDFs
'GELİŞTİRİCİ: Ryan Wells
'TANIM: E-tablonuzdaki her bir tabloyu farklı bir PDF'ye yazdırın
Dim strTables () As String
Dim strfile As String
Dim Ch As Object, Sh As Çalışma Sayfası
Sayı olarak Tepe Sayacı
Değişken olarak Dim myfile
Dim tbl As ListObject
Çalışma sayfası olarak Dim sht
Application.FileDialog (msoFileDialogFolderPicker) ile
.Title = "PDF'nizi nereye kaydetmek istiyorsunuz?"
.ButtonName = "Buraya Kaydet"
.InitialFileName = ThisWorkbook.Path
Eğer .Show = -1 Sonra 'Tamam'a basılırsa
Sfolder = .SelectedItems (1)
Başka
Son
Son If
İle bitmek
Her İş İçin İçin ThisWorkbook.Worksheets
Her tbl için sht.ListObjects içinde
Myfile = ThisWorkbook.Name & "" & tbl.Name & "" _
& Biçimlendir (Şimdi (), "yyyymmdd_hhmmss") _
& ".pdf"
Myfile = sfolder & "\" & myfile
Sht.Range (tbl.Adı) .ExportAsFixedFormat Türü: = xlTypePDF, Dosya adı: = _
Myfile, Kalite: = xlQualityStandard, IncludeDocProperties: = True, _
IgnorePrintAreas: = Yanlış, OpenAfterPublish: = True
Sonraki tbl
Sonraki sht
End Sub

Tüm Sayfaları Bir PDF'ye Yazdır

Seni tanımıyorum, ancak çalışma alanımızda hemen hemen tüm elektronik tablolarımın PDF kopyalarını elinde tutmak zorundayız. E-tablolarımızın PDF kopyalarını tasarım hesaplamalarımıza ekliyoruz. Bu PDF'lar mikrofişe dönüştürülmüş ve uzun süreli retansiyon için tonozlu hale getirilmiştir. Bilirsiniz, kıyamet olayı ihtimaline karşı.

Kendinizi benzer bir durumda bulursanız e-tablonuzdaki tüm sayfaları bir PDF'ye otomatik olarak dönüştürebilirsiniz güzel. İşte bunları yapacak bir VBA makrosu:

Alt BaskıAllSheetsToPDF ()
'ALTROUTİN: PrintAllSheetsToPDF
'GELİŞTİRİCİ: Ryan Wells
'TANIM: Tüm çalışma sayfalarınızı bir PDF'ye birleştirin
Dim strSheets () As String
Dim strfile As String
Dim sh As Worksheet
Sayı olarak Tepe Sayacı
Değişken olarak Dim myfile
'Grafik Sayfası adlarını bir Diziye Kaydet
Her biri için ActiveWorkbook.Worksheets'de
Eğer sh.Visible = xlSheetVisible Then
ReDim strSheets'i koru (icount)
StrSheets (icount) = sh.Name
Icount = icount + 1
Son If
Sonraki sh
Eğer icount = 0 Then 'Hiçbir çizelge bulunamadı. Punch hatası
MsgBox "Sayfa bulunamadığından PDF oluşturulamadı.", "Sayfalar Bulunamadı"
Çıkış Sub
Son If
'Konum kaydetmek için sor
Strfile = "Tablolar" & "_" _
& Biçimlendir (Şimdi (), "yyyymmdd_hhmmss") _
& ".pdf"
Strfile = ThisWorkbook.Path & "\" & strfile
Myfile = Application.GetSaveAsFilename _
(Başlangıç ​​DosyasıAdı: = strfile, _
FileFilter: = "PDF Dosyaları (* .pdf), * .pdf", _
Title: = "PDF Olarak Kaydedilecek Klasör ve Dosya Adını Seçin")
Myfile <> "Yanlış" Sonra 'PDF olarak kaydedin
ThisWorkbook.Sheets (strSheets) .Select
ActiveSheet.ExportAsFixedFormat Türü: = xlTypePDF, Dosya adı: = _
Myfile, Kalite: = xlQualityStandard, IncludeDocProperties: = True, _
IgnorePrintAreas: = Yanlış, OpenAfterPublish: = True
Başka
MsgBox "Dosya Seçilmedi .PDF kaydedilemiyor", vbOKOnly, "No File Selected"
Son If
End Sub

Tabloları PDF'ye Yazdır

Bu makro, tüm grafik sayfalarınızı bir PDF'ye dönüştürür - ancak grafik nesnelerinize dönüştürmez! Grafik sayfaları olarak, e-tablo sekmeler listesinde kendi sekmesine sahip olan grafikleri kastediyorum:

Alt PrintChartSheetsToPDF ()
'SUBROUTINE: PrintChartSheetsToPDF
'GELİŞTİRİCİ: Ryan Wells
'TANIM: Tüm grafik sayfalarını bir PDF'ye birleştirin
Dim strSheets () As String
Dim strfile As String
Dim Ch As Object, Sh As Çalışma Sayfası
Sayı olarak Tepe Sayacı
Değişken olarak Dim myfile
'Grafik Sayfası adlarını bir Diziye Kaydet
Her satır için ActiveWorkbook.Charts'da
ReDim strSheets'i koru (icount)
StrSheets (icount) = ch.Name
Icount = icount + 1
Sonraki ch
Eğer icount = 0 Then 'Hiçbir çizelge bulunamadı. Punch hatası
MsgBox "Hiçbir Grafik Tablosu bulunamadığından bir PDF oluşturulamaz.", "No Chart Sheets Found"
Çıkış Sub
Son If
'Konum kaydetmek için sor
Strfile = "Grafikler" ve "_" _
& Biçimlendir (Şimdi (), "yyyymmdd_hhmmss") _
& ".pdf"
Strfile = ThisWorkbook.Path & "\" & strfile
Myfile = Application.GetSaveAsFilename _
(Başlangıç ​​DosyasıAdı: = strfile, _
FileFilter: = "PDF Dosyaları (* .pdf), * .pdf", _
Title: = "PDF Olarak Kaydedilecek Klasör ve Dosya Adını Seçin")
Myfile <> "Yanlış" Sonra 'PDF olarak kaydedin
ThisWorkbook.Sheets (strSheets) .Select
ActiveSheet.ExportAsFixedFormat Türü: = xlTypePDF, Dosya adı: = _
Myfile, Kalite: = xlQualityStandard, IncludeDocProperties: = True, _
IgnorePrintAreas: = Yanlış, OpenAfterPublish: = True
Başka
MsgBox "Dosya Seçilmedi .PDF kaydedilemiyor", vbOKOnly, "No File Selected"
Son If
End Sub

Grafik Nesnelerini PDF'ye Yazdır

Bu makro, normal grafiklerinizin - grafik nesnelerinin - tek bir PDF'ye kaydedilmesini sağlar. Grafiğinizin hangi çalışma sayfasında olursa olsun, bir PDF'ye yakalanır ve kaydedilir.

Son PDF'de yalnızca bir sayfa listesi olacak.

Alt PrintChartsObjectsToPDF ()
'SUBROUTINE: PrintChartsObjectsToPDF
'GELİŞTİRİCİ: Ryan Wells
'TANIM: Tüm grafik nesnelerini bir PDF'ye birleştirin
Çalışma Sayfası Olarak Dim wsTemp As Worksheet
Dim chrt As ChartObject
Dim tp As Long
Dim strfile As String
Değişken olarak Dim myfile
Application.ScreenUpdating = Yanlış
WsTemp = Sheets.Add ayarla
Tp = 10
WsTemp ile
ActiveWorkbook'da her ws için .Worksheets
Eğer ws.Name = wsTemp.Name Then GoTo nextws:
Her Çerçeve İçin ws.ChartObjects
Chrt.Copy
WsTemp.Range ("A1"). Yapıştır Özel
Selection.Top = tp
Selection.Left = 5
Eğer Selection.TopLeftCell.Row> 1 Then
ActiveSheet.Rows (Selection.TopLeftCell.Row) .PageBreak = xlPageBreakManual
Son If
Tp = tp + Selection.Height + 50
Sonraki
Sonrakileri:
Sonraki ws
İle bitmek
'Konum kaydetmek için sor
Strfile = "Grafikler" ve "_" _
& Biçimlendir (Now (), "yyyymmdd \ _hhmmss") _
& ".pdf"
Strfile = ActiveWorkbook.Path ve "\" & strfile
Myfile = Application.GetSaveAsFilename _
(Başlangıç ​​DosyasıAdı: = strfile, _
FileFilter: = "PDF Dosyaları (* .pdf), * .pdf", _
Title: = "PDF Olarak Kaydedilecek Klasör ve Dosya Adını Seçin")
Myfile <> Yanlış Olacak Sonra 'PDF olarak kaydet
WsTemp.ExportAsFixedFormat Türü: = xlTypePDF, Dosya adı: = myfile, Kalite: = xlQualityStandard, _
IncludeDocProperties: = True, IgnorePrintAreas: = Yanlış, OpenAfterPublish: = True
'Else
'MsgBox "Dosya Seçilmedi .PDF Kaydedilmiyor", vbOKOnly, "No File Selected"
Son If
Application.DisplayAlerts = Yanlış
WsTemp.Delete
Uygulama ile
.ScreenUpdating = Doğru
.DisplayAlerts = True
İle bitmek
Çıkış Sub
End Sub

2 Yorum Yapıldı

  1. Erdal 2017-11-13 20:37:59

    Merhaba; Makrolarınız da hata var. Galiba kodların bazı satıları Türkçe'ye çevrilmiş. Acaba düzeltmeniz mümkün mü? Yada örnek çalışmaları ekleyebilir misiniz?

  2. fatih 2018-12-17 08:23:21

    Kodlar Türkçeye çevrilmiş. Rica etsem düzeltirmisiniz. Yada e-mail adresime kendim için düzenleyebilmem için farklı pdf dokümanlarını tek pdf yapma için yardım ederseniz sevinirim. İyi günler.

Yorum Yollayın