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.
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 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.
İ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.
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.
Şimdi sıra VBA kısmında. Label1‘e çift tıklayarak VBA kodlarını yazacağımız editöre geçiş yapıyoruz.
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.
Ş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.
Klasöre gidip bakalım.