-- Programlama

VBA ile Word Dökümanını PDF Olarak Kaydetme

Geçtiğimiz gün yakın bir arkadaşımın arkadaşından bir iş istenmiş. İş şu şekilde. Elimizde bir kabarık bir excel listesi var. Hemen bunun yanında word ile hazırlanmış bir davet mektubu var. Excel listesindeki her kişinin bilgileri alınıp bu davet mektubuna kopyalanacak ve pdf olarak kayıt edilecek. Ben örneklerde 5 kayıt için yaptım. 5 kayıt için ne gerek var bu kadar uğraşa diyebiliriz. 5 değilde 555 olsaydı ne olur du?

Bu noktada devereye Visual Basic for Applications (VBA) devreye giriyor. Nedir ne değildir şuradan daha detaylı bilgiye ulaşabilirsin.

Excel listemiz şu şekilde olsun.

excelList-1

Davet mektubu şablonumuz da şu şekilde olsun. Listemizdeki A ve B sütunundaki değerler isim soyisim kısmına, C sütunundaki değere göre de hanım ya da bey yazılmasını istiyoruz. Bu önek için C sütununa direk hanım yada bey yazıp direk kullanabiliriz fakat amacım şeçim durumunu göstermek.

word-1

Word dökümanımızı yazacağımız VBA kodlarıyla saklayabilmek için File >  Save As adımlarını izleyerek Word Macro-Enabled Document (*.docm) formatıyla kaydediyoruz.

word-3

İlk olarak word uygulamasında Developer sekmesini açıyoruz. Bunun için File > Options > Customize Ribbon adımlarını izleyerek Developer sekmesini seçip aktifleştiriyoruz.

word-2

Sonrasında Developer sekmesinden iki adet label ekliyoruz. Bunları isteğimize göre biçilemdiriyoruz. Burada Merhaba kısmını label yaptım ki bu labelı button olarak kullanacağım. word-4

word-5

Şimdi sıra VBA kısmında.  Label1‘e çift tıklayarak VBA kodlarını yazacağımız editöre geçiş yapıyoruz.

vba-1

Excel dökümanından verileri okuyabilmek için ufak bir ayarlama daha yapmak gerekiyor. Tools > References adımlarını izleyerek  Excel kütüphanesini ekliyoruz.

vba-2

Şimdi kodlarımızı yazabiliriz.

Private Sub Label1_Click()
    Dim i As Integer
    Dim pathS As String
    Dim strTemp As String
    Dim objExcel As New Excel.Application
    Dim exWb As Excel.Workbook
    Dim sh As Worksheet
    Dim k As Long
    Dim hitap As String
    Dim isimSoyisim As String
    Dim pdfName As String
    
    pathS = ActiveDocument.Path & Application.PathSeparator
    Set exWb = objExcel.Workbooks.Open(pathS & "excelList.xlsx")
    Set sh = exWb.Sheets("Sheet1")
    
    k = sh.Range("A1", sh.Range("A1").End(xlDown)).Rows.Count
    
    answer = MsgBox(k & " adet pdf dosyası oluşturulacak. Onaylıyor musunuz?", vbYesNo + vbQuestion, "PDF Oluşturma")
    
    If answer = vbYes Then
        For i = 1 To k
        
            If sh.Cells(i, "C") = "E" Then
                hitap = " Bey,"
            Else
                hitap = " Hanım,"
            End If
            
            isimSoyisim = sh.Cells(i, "A") & " " & sh.Cells(i, "B")
            
            ThisDocument.Label2.Caption = isimSoyisim & hitap
            
            strTemp = i & "_" & sh.Cells(i, "A") & "_" & sh.Cells(i, "B")
            pdfName = pathS & "pdf\" & strTemp & ".pdf"
            
            ActiveDocument.ExportAsFixedFormat OutputFileName:=pdfName, ExportFormat:= _
            wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:=wdExportOptimizeForPrint, Range:=wdExportAllDocument, _
            Item:=wdExportDocumentContent, IncludeDocProps:=True
        Next i
        MsgBox i - 1 & " adet pdf dosyası oluşturuldu" & vbCrLf & pathS & "pdf" & vbCrLf & "klasörü altından ilgili dosyalara ulaşabilirsiniz.", vbInformation, "PDF Oluşturma"
        exWb.Close
    Else
        'do nothing
    End If
    
    Set exWb = Nothing
End Sub

Bu kadar, test edebiliriz. Merhaba labelını button olarak kullayoruz.

word-6

word-7

Klasöre gidip bakalım.

pdf-1

pdf-2

pdf-3

Yorumla

Yorum