VBA Kullanarak Excel'i PDF'ye Dönüştürün - İhtiyacınız Olan Tek Kılavuz

*Bu, blog yazarı ve mükemmel bir VBA geliştiricisi olan Ryan Wells'in konuk yazısıdır.*

Excel ile çalışıyorsanız, şüphesiz çalışmanızın özetlerini oluşturmanız istenmiştir.

Satış raporları, faturalar, tahminler, planlar, adını siz koyun.

Bütün bu belgelerin ortak noktası ne biliyor musunuz? PDF biçiminde harika görünüyorlar. Başka ne var biliyor musun? Yönetim PDF'leri sever!

Excel'i PDF'ye Dönüştür

Bu eğitimde, her tür Excel nesnesini PDF'ye dönüştürmek için Excel VBA'yı nasıl kullanacağınızı göstereceğim:

Makroların her birini bazı yorumlarla sunacağım. Bu şekilde onları hızlıca bulabilir, VBA düzenleyicinize kopyalayabilir ve kullanabilirsiniz.

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

Hemen ona geçelim.

İşte makrolar:

Seçimi PDF'ye Yazdır

Bu benim kişisel favorim. Bu makro, aktif olarak seçmiş olduğunuz hücreleri bir PDF'ye dönüştürecektir.

Yalnızca bir hücre seçiliyse, VBA makrosu muhtemelen yalnızca bir hücreyi dönüştürmek istemediğinizi anlayacak kadar akıllıdır, bu nedenle dönüştürmek istediğiniz aralığı seçmenizi ister:

Sub PrintSelectionToPDF() 'SUBROUTINE: PrintSelectionToPDF 'DEVELOPER: Ryan Wells ' AÇIKLAMA: Şu anda seçili aralığınızı bir PDF'ye yazdırın Dim ThisRng As Range Dim strfile As String Dim myfile As Variant If Selection.Count = 1 Sonra ThisRng = Application.InputBox( "Bir aralık seçin", "Aralık Al", Tür:=8) Else Set ThisRng = Seçim Sonu If 'Kaydetme konumu için sor strfile = "Seçim" & "_" _ & Format(Şimdi(), "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="PDF Files (*.pdf), *.pdf", _ Title:= "PDF Olarak Kaydedilecek Klasörü ve Dosya Adını Seçin") myfile "False" ise, 'PDF olarak kaydet ThisRng.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:== False, OpenAfterPublish:=True Else MsgBox "Dosya Seçilmedi. PDF kaydedilmeyecek", vbOKOnly, "Dosya Seçilmedi" End 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örüntülenecektir.

Sisteminizin saatinden tarih ve saati otomatik olarak seçecek ve dosya adına ekleyecektir.

Bir Tabloyu PDF'ye Yazdır

Birçok Excel uzmanı kullanıcısı verilerini organize tablolarda depolar. Nitekim Sumit Bansal, Excel tablolarını o kadar çok seviyor ki, onlara Excel'de gizli bir hazine diyor.

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

Sub PrintTableToPDF() 'ALT YÖNTEM: PrintTableToPDF 'DEVELOPER: Ryan Wells ' AÇIKLAMA: Dim strfile As String Dim myfile As Variant Dim strTable As String, r As Range Application.ScreenUpdating = False 'Tabloyu girin kaydetmek istediğiniz isim strTable = InputBox("Kaydetmek istediğiniz tablonun adı nedir?", "Tablo Adını Girin") 'Kaydetmek istediğiniz tablo Eğer Trim(strTable) = "" Sonra Exit Sub 'Kaydetme istemi konum strfile = strTable & "_" _ & Format(Now(), "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="PDF Files (*.pdf), *.pdf", _ Title:="PDF Olarak Kaydedilecek Klasörü ve Dosya Adını Seçin") Eğer myfile "False" ise, 'PDF Range(strTable).ExportAsFixedFormat Type olarak kaydedin :=xlTypePDF, Filename:=myfile, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True Else MsgBox "Dosya Seçilmedi. PDF olmayacak kaydedildi", vbOKOnly, "Dosya Seçilmedi" End If Application.DisplayAlerts = False LetsContinue: Uygulama ile .ScreenUpdating = True .DisplayAlerts = True End with Exit Sub End Sub

Tablonun adını girip Tamam'ı tıkladığınızda, PDF'yi nereye kaydetmek istediğinizi seçebileceğiniz bir iletişim kutusu görüntülenecektir.

Sisteminizin saatinden tarih ve saati otomatik olarak seçecek ve dosya adına ekleyecektir.

PDF'leri Ayırmak İçin Tüm Tabloları Yazdır

E-tablonuzda birkaç tablo varsa ve her birini ayrı bir PDF'ye kaydetmeniz gerekiyorsa, 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ünecektir.

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

Sub PrintAllTablesToPDFs() 'ALT PROUTINE: PrintAllTablesToPDFs 'Geliştirici: Ryan Wells ' AÇIKLAMA: Elektronik tablonuzdaki her 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ı Dim icount As Integer Dim As Variant Dim tbl As ListObject Dim sht As Worksheet with Application.FileDialog(msoFileDialogFolderPicker) .Title = "PDF'nizi nereye kaydetmek istiyorsunuz?" .ButtonName = "Buraya Kaydet" .InitialFileName = ThisWorkbook.Path If .Show = -1 O zaman ' OK'e basılırsa sfolder = .SelectedItems(1) Else End End If End With ThisWorkbook'taki Her sht İçin. Her tbl İçin Çalışma Sayfaları sht'de .ListObjects myfile = ThisWorkbook.Name & "" & tbl.Ad & "" _ & Format(Now(), "yyyymmdd_hhmmss") _ & ".pdf" myfile = sfolder & "\" & myfile sht.Range(tbl.Name).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality :=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=True Next tbl Sonraki sht End Sub

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

Sizi bilmem ama benim işim gereği neredeyse tüm elektronik tablolarımızın PDF kopyalarını saklamamız gerekiyor. Elektronik tablolarımızın PDF kopyalarını tasarım hesaplamalarımıza ekliyoruz. Bu PDF'ler eskiden mikrofişlere dönüştürülür ve uzun süreli saklama için tonozlanırdı. Biliyorsun, kıyametin olması durumunda.

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

Sub PrintAllSheetsToPDF() 'ALT PROUTINE: PrintAllSheetsToPDF' GELİŞTİRİCİ: Ryan Wells ' AÇIKLAMA: Tüm çalışma sayfalarınızı tek bir PDF'de birleştirin Dim strSheets() As String Dim strfile As String Dim sh As Çalışma Sayfası Dim icount As Integer Dim myfile As Variant 'Save Chart Sheet adları ActiveWorkbook.Worksheets'teki Her sh İçin Bir Diziye sh.Visible = xlSheetVisible ise ReDim Preserve strSheets(icount) strSheets(icount) = sh.Name icount = icount + 1 Eğer Sonraki sh ise End icount = 0 ise, 'Hiç grafik bulunamadı. Delme hatası MsgBox "Hiçbir sayfa bulunamadığından PDF oluşturulamıyor.", , "Yaprak Bulunamadı" Alt Sondan Çık If 'Kaydetme konumu iste strfile = "E-Tablolar" & "_" _ & Format(Now(), " yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="PDF Dosyaları (*.pdf), *.pdf", _ Title:="PDF Olarak Kaydedilecek Klasörü ve Dosya Adını Seçin") Dosyam "Yanlış" ise, 'PDF olarak kaydedin ThisWorkbook.Sheets(strSheets). ActiveSheet.ExportAsFixedFormat'ı seçin Tür:=xlTypePDF, Dosyaadı:= _ dosyam, Kalite: =xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=True Else MsgBox "Dosya Seçilmedi. PDF kaydedilmeyecek", vbOKOnly, "Dosya Seçilmedi" End If End Sub

Grafik Sayfalarını PDF'ye Yazdır

Bu makro, tüm Grafik Sayfalarınızı tek bir PDF'ye dönüştürür - ancak grafik nesnelerinizi değil! Grafik sayfaları derken, elektronik tablo sekmeleri listenizde kendi sekmesi olan grafikleri kastediyorum:

Sub PrintChartSheetsToPDF() 'ALT YÖNTEM: PrintChartSheetsToPDF' GELİŞTİRİCİ: Ryan Wells ' AÇIKLAMA: Tüm grafik sayfalarını tek bir PDF'de birleştirin Dim strSheets() As String Dim strfile As String Dim ch As Object, sh As Worksheet Dim icount As Integer Dim myfile As Variant olarak Grafik Sayfası adlarını bir Diziye Kaydet ActiveWorkbook.Charts ReDim'deki Her ch İçin strSheets(icount) strSheets(icount) = ch.Name icount = icount + 1 Sonraki ch Eğer icount = 0 ise, 'Hiç grafik bulunamadı. Delme hatası MsgBox "Hiçbir Grafik Sayfası bulunamadığından PDF oluşturulamıyor.", , "Grafik Sayfası Bulunamadı" Alt Sondan Çık Eğer 'kaydetme konumu iste strfile = "Charts" & "_" _ & Format(Now()) , "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="PDF Dosyaları (*.pdf), *.pdf" ", _ Title:="PDF Olarak Kaydedilecek Klasörü ve Dosya Adını Seçin") Eğer dosyam "Yanlış" ise O zaman 'PDF olarak kaydedin ThisWorkbook.Sheets(strSheets).Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=True Else MsgBox "Dosya Seçilmedi. PDF kaydedilmeyecek", vbOKOnly, "Dosya Seçilmedi" End If End Sub

Grafik Nesnelerini PDF'ye Yazdır

Bu makro, tüm normal çizelgelerinizi - çizelge nesneleri - tek bir PDF'ye kaydeder. Grafiğiniz hangi çalışma sayfasında olursa olsun, yakalanacak ve bir PDF'ye kaydedilecektir.

Son PDF'de sayfa başına yalnızca bir grafik olacaktır.

Sub PrintChartsObjectsToPDF() 'ALT YÖNTEM: PrintChartsObjectsToPDF' GELİŞTİRİCİ: Ryan Wells ' AÇIKLAMA: Tüm grafik nesnelerini tek bir PDF'de birleştirin Dim ws As Worksheet, wsTemp As Worksheet Dim chrt As ChartObject Dim tp As Long Dim strfile As String Up Dim strfile As Variant Uygulaması Dim. = False Set wsTemp = Sheets.Add tp = 10 wsTemp ile ActiveWorkbook'taki Her ws için.Worksheets Eğer ws.Name = wsTemp.Name ise sonraki ws'ye gidin: ws.ChartObjects içindeki her chrt.Copy wsTemp.Range("A1") .PasteSpecial Selection.Top = tp Selection.Left = 5 If Selection.TopLeftCell.Row > 1 Sonra ActiveSheet.Rows(Selection.TopLeftCell.Row).PageBreak = xlPageBreakManual End If tp = tp + Selection.Height + 50 Sonraki sonrakiws: Sonraki ws 'Kaydetme konumu için sor strfile = "Charts" & "_" _ & Format(Now(), "yyyymmdd\_hhmmss") _ & ".pdf" strfile = ActiveWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="PDF Dosyaları (*.pdf), *.pdf", _ Title:="Fol Seçin der ve PDF Olarak Kaydedilecek Dosya Adı") myfile False ise 'PDF olarak kaydet wsTemp.ExportAsFixedFormat Type:=xlTypePDF, Filename:=myfile, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= True 'Else' MsgBox "Dosya Seçilmedi. PDF kaydedilmeyecek", vbOKOnly, "Dosya Seçilmedi" End If Application.DisplayAlerts = False wsTemp.Delete with Application .ScreenUpdating = True .DisplayAlerts = True End with Exit Sub End Sub

Herhangi bir sorunuz varsa, bunları Ryan ve benim sizi orada bekliyor olacağımız yorumlar bölümüne bırakın.

Aşağıdaki Excel Eğitimlerini de Beğenebilirsiniz:

  • Bir Excel Çalışma Sayfasına PDF Dosyası Nasıl Gömülür.
  • Excel VBA Döngüleri: Sonraki İçin, Yaparken, Yapana Kadar, Her Biri İçin (Örneklerle).
  • Excel'de Makro Nasıl Kaydedilir
  • Birden Çok Çalışma Kitabını Bir Excel Çalışma Kitabında Birleştirme.
  • Excel'de Makro Nasıl Çalıştırılır.
  • Excel Eklentisi Nasıl Oluşturulur ve Kullanılır.
  • Excel VBA Hata İşleme
  • Her Excel Sayfasını Ayrı Dosyalara Bölün
  • XML Dosyasını Excel'e Aktarma | XML'i Excel'e Dönüştür

Yazar hakkında: Ryan Wells bir Nükleer Mühendis ve profesyonel VBA Geliştiricisidir. Başkalarının daha iyi makrolar yazmasına yardımcı olmak için anlaşılması kolay Excel VBA eğitimlerini yayınlar. VBA'yı öğretmeye ek olarak, Ryan birkaç Excel eklentisinin baş geliştiricisidir. Eğitimlerini WellsR.com'da bulabilirsiniz.

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave