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
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?
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.