Kategoriler
Excel Uygulamaları

Mailings ile Ayrı Dosyalar Oluşturma

Mailings sistemi ile şablon ile bir Excel veri tablosundan çok nüshada evrak oluşturma işlemini daha önce incelemiştik. Şimdi biraz daha ileri düzey detaylara değineceğiz. Burada mailings ile her kayıt için münferit, ayrı Word dosyası oluşturmayı adım adım göreceğiz.

Şöyle bir örnek durumu ele alalım. Şablonumuz 2 sayfalık bir mektup olsun ve Excel üzerinde 150 ayrı kayıt olsun. Mailings yaptığımızda oluşturulan dosya, her bir kayıt için 2 sayfa olmak üzere toplamda 300 sayfalık tek bir dosyadır. Word içindeki ayarlar bize bunu tek bir seferde 300 sayfalık yazıcı çıktısı alma veya 300 sayfalık tek bir dosya şeklinde Word ortamında kaydetme imkanı sağlamaktadır.

Kullandığımız şablon toplamda 2 sayfalık bir evrak olduğu için, Word her 2 sayfada bir “Section Break – Next Page” yani sonraki sayfaya geçmeyi sağlayan tipte bir “bölüm sonu” ekler. Bu “bölüm sonu” elemanı, bu bölümün bittiğini, bir sonraki bölümün daima sonraki sayfadan başlayacağını ifade eder.

Aklımızda tutmamız gereken önemli husus şudur, bu yöntem ile bölüm sonlarına göre ayrım yapan bir makro yazacağız. Yani sizin esas Word şablonunuz kendi içerisinde bölüm sonu içermemeli. Bölüm sonlarının sadece evrak sonunda, değişik iki Excel kaydı için hazırlanmış evraklar arasında olması gerekmektedir, aksi takdirde verimli sonuç alamayabilirsiniz.

Sub BolumAyir()
‘Evrak icinde bolum-bolum gezmeyi ayarlamak için kullanilir.
Application.Browser.Target = wdBrowseSection

‘Mailings dosyalari bolum sonu ve yeni sayfa ile biter.
‘Bolum sayisindan bir cikarmak hata mesajini durdurur.
For i = 1 To ((ActiveDocument.Sections.Count) – 1)

‘Bolumu secip panoya kopyalar.
ActiveDocument.Bookmarks(“\Section”).Range.Copy

‘Yeni dokuman olustur ve panodan yapistir.
Documents.Add
Selection.Paste

‘Yapistirma islemi ile gelen (varsa) sayfa sonudaki bolum sonunu siler.
Selection.MoveUp Unit:=wdLine, Count:=1, Extend:=wdExtend
Selection.Delete Unit:=wdCharacter, Count:=1

ChangeFileOpenDirectory “C:\KAYIT YAPILACAK DOSYA ADRESİ EKLENECEK
DocNum = DocNum + 1
ActiveDocument.SaveAs FileName:=”test_” & DocNum & “.doc”
ActiveDocument.Close
‘Secimi dokuman icindeki bir sonraki bolume kaydir.
Application.Browser.Next
Next i
ActiveDocument.Close savechanges:=wdDoNotSaveChanges
End Sub

Mailings dosyamızı hazırladıktan sonra, “Finish & Merge” düğmesine basıp, “Edit Individual Documents…” seçeneğini seçip, tüm kayıtları içeren tek bir Word dosyası elde etmeliyiz önce. Bir sonraki adımda ise, tüm kayıtları içeren bu uzun Word dosyasını, her kayıt arasında bulunan “Bölüm Sonu – Sonraki Sayfa” ögelerine göre ayırıp ayrı evraklar şeklinde kaydedeceğiz. Yani dolaylı yoldan da olsa, mailings ile tüm kayıtları ayrı ayrı dosyalara kaydetmiş olacağız.

Öncelikle makro’yu Word’e aktaralım.

mailings-advanced1
Şekil-1: Makro’ları görüntüle seçeneği.

Şekil-1’deki gibi makroları görüntüle seçeneğine bastığımızda, karşımıza çıkan pencerede, “a” gibi geçici bir isim verip “Create” düğmesine basalım.

mailings-advanced2.PNG
Şekil-2: Makro penceresi

Bu “a” isminin hiçbir önemi yok, zira makromuz kendi adını oluşturacak. Karşımıza Microsoft VBA penceresi çıkacak. Burada birkaç karakter halinde yazılar göreceğiz. Şekildeki gibi hepsini seçip silelim.

mailings-advanced3.PNG
Şekil-3: Silinecek yazılar.

Şimdi yapmamız gereken, yukarıda paylaştığım makro’yu olduğu gibi bu alana yapıştırıp, makro içindeki kayıt adresini doğru bir şekilde yazmak.

ChangeFileOpenDirectory “C:\KAYIT YAPILACAK DOSYA ADRESİ EKLENECEK”

Bu kısımı ihtiyaca göre (oluşan dosyaları kayıt edeceğiniz klasör adresini yazmalısınız) düzenledikten sonra bu CTRL+S ile kaydedip çıkabilirsiniz.

Şimdi makro penceresini tekrar açtığımızda, makromuzun kendini düzgün isimle kaydettiğini görebiliriz.

mailings-advanced4
Şekil-4: Kaydedilmiş makro.

Şimdi sağ üstteki “Run” düğmesi ile makromuzu çalıştırabiliriz. Ekranda birkaç yanıp sönme şeklinde, Word dosyaları açılıp kapanacaktır. Bunların sonlanmasını bekleyelim. Ekran durulduğunda, adres olarak belirttiğimiz klasöre gidip oluşturulan Word dosyalarını görebilirsiniz.

mailings-advanced5
Şekil-5: Oluşturulan dosyalar.

Bu örneği hazırlarken kullanılan Excel tablosunda toplam 6 kayıt vardı ve bu şekilde 6 farklı Word dosyası olarak topluca kayıt edebildik.

Alternatif Makro

Bazı okurlarımızdan gelen şikayetler üzerine alternatif bir makro daha paylaşmak istedik. Bu makro içinde de kayıt klasörü adresini belirtmeyi ihmal etmeyiniz.

Sub Splitter()
    Dim numlets As Integer
    Dim Counter As Integer
    Dim BaseName As String
    Dim DocName As String
    Selection.EndKey Unit:=wdStory
    numlets = Selection.Information(wdActiveEndSectionNumber)
    If numlets > 1 Then numlets = numlets – 1
    Selection.HomeKey Unit:=wdStory
    BaseName = “C:\KLASÖR\DOSYA
    For Counter = 1 To numlets
        DocName = BaseName & Right(“000” & LTrim(Str(Counter)), 3)
        ActiveDocument.Sections.First.Range.Cut
        Documents.Add
        Selection.Paste
        Selection.MoveLeft Unit:=wdCharacter, Count:=1
        Selection.Delete Unit:=wdCharacter, Count:=1
        ActiveDocument.SaveAs FileName:=DocName
        ActiveWindow.Close
    Next Counter
End Sub

Umarım faydalı olmuştur.

Güncelleme

Doğrudan son kayıta atlamak için aşağıdaki düğmeleri kullanabilirsiniz:

son kayit

“Mailings ile Ayrı Dosyalar Oluşturma” için 4 yanıt

Merhaba mailing olayı açıldığında son kayıdın çıkması istiyorum ancak word dosyası açıldığında ilk kayıt çıkıyor. Birde bu her defasında çıkan hata mesajını nasıl kaldırabiliriz

Merhabalar Akif Bey,
Öncelikle Word dosyasını her açtığında çıkan uyarı “dikkat, bu dosya içine başka bir dosyadan veri getirilecektir” şeklinde bir uyarı, maalesef bunu kaldırma yolu yok. Her açtığınızda görüntülenecektir.

Dosyayı açtığınızda ise “Sonuçları Önizle” (Preview Results) kısmındaki tuşlar ile doğrudan son kayıta geçiş yapabilirsiniz (tek tık ile). İlgili resmi yazının son kısmına ekledim.

Saygılarımla.

iyi günler,
çok işime yarayacak bir makro teşekkürler..
bi isteğim olacak..ayrı ayrı kaydedilen dosyaların isimleri belgede geçen şahsın ismi olsun..
veya excel listesinden alsın isimleri…bu da olursa tadından yenmez 🙂

Merhaba ,

Öncelikle yapmış olduğunu çalışma için teşekkür ederim. Ben belirttiğiniz şekilde bu adımları uyguladım. Makro’da işleminde hata’da vermiyor. Ama adreslediğim klasöre herhangi bir kayıt yapmadı. Nerde hata yapıyor olabilirim ? Elinizde Örnek dosya var ise paylaşabilir misiniz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir