Excel'den Word'e Otomatik Veri Aktarımı

İÇİNDEKİLER

1.1 Referanslama İşlemi

     VBA açıldığında, Word uygulamasını tanımaz ve Word ile herhangi bir bağlantısı da yoktur.  Bu sebepten ilk olarak Word Uygulamasının, VBA Editor ve Excel tarafından tanınması için REFERANS’lama işlemi gerçekleştiririz. 

      VBA Editor—>Tools—->References—-> Açılan pencere içinde ‘Microsoft Word 1X.0 Object Library‘* yanındaki kutucuğa ‘tik’ koyuyoruz ve Referans işlemini tamamlıyoruz. Artık Excel VBA Word’ü tanır hale gelmiştir. 

ExcelToWord - ReferencesWindow

*Not_1

    -Office 2003 kullanıyorsanız:     ‘Microsoft Word 11.0 Object Library’

    -Office 2007 kullanıyorsanız:     ‘Microsoft Word 12.0 Object Library’

    -Office 2010 kullanıyorsanız:     ‘Microsoft Word 14.0 Object Library’

    -Office 2013 kullanıyorsanız:     ‘Microsoft Word 15.0 Object Library’

    Kullandığınız office sürümüne göre Referans alacağınız Object Library numaraları değişiklik gösterir. Eğer bilgisayarınızda 2 farklı sürüm birden yüklü değilse, zaten tıklayabileceğiniz tek bir object library görüntülenebilecektir. Bu ders Office 2010 kullanılarak hazırlandığı için ‘Microsoft Word 14.0 Object Library’i tıklı göreceksiniz. 

1.2 Makro İle Word Uygulamasının Çalıştırılması

ExcelToWordDataTransfer - PreDefined

1.2.1 Word Uygulamasının Çalıştırılmasına Dair Mini-Video

1 – İlk olarak Word Uygulaması tipinde bir değişken tanımlıyoruz. (Burada Word ifadesini kullanmazsanız, da IntelliSense’de çıkacak 2 adet ‘Application’ ifadesinden alttakini seçtiğinizden emin olun. Üstteki her zaman Excel’e ait Application’dır(Kütüphane).

2 – wordUYG değişkenine, yeni bir word Uygulaması değeri atanıyor. 

3 – İkinci maddeden sonra Sub-Routine çalıştırılırsa, word ekranda görünmeden sadece arka planda çalışacaktır. Sadece .Visible özelliğinin True yapılması sayesinde word uygulaması ekranda görünür olabilmektedir.

4 – Artık çalışmaya başlayan word, bu satır sayesinde, bilgisayardaki aktif uygulama halini alacaktır.

<<<<<<

    Sol tarafta yer alan kısa video ile kodun işleyişini takip edebilirsiniz. 2 numaralı maddenin çalışması ile birlikte Sub-Routine normalden fazla, yaklaşık 2-3 saniye duraksayacaktır. Sebebi ise arka planda, sadece ‘Windows Task Manager’ de görüntülenebilecek şekilde word uygulamasının başlatılmış olmasıdır. 

2. Makro İle Word Belgesi Açmak , Belgeye Yazı Yazmak ve Excel'den Tablo Kopyalamak

    Aşağıda aynı görevi yerine getiren ancak farklı şekillerde yazılmış 2 Sub-Routine paylaşılmaktadır. İki Sub-Routine arasındaki tek fark, ikinci Sub-Routine’de With Statement kullanarak, koda daha derli toplu bir şekil verilmiş olmasıdır. 

     With Statement’e aşikar olmayanlar çok kısa şekilde aşağıdaki linkten konuya ait sayfayı ziyaret edebilir veya ‘With Statement’ kullanılmadan yazılan ilk Sub-Routine’i inceleyerek akıllarına takılan kısımları birbiriyle karşılaştırabilirler. 

Örnek Sub-Routine 1

ExcelToWordAutomaticDataTransfer - CreateWordDocument_Code1

Bu Sub-Routine’de görebileceğiniz gibi aynı nesne (wordUYG.Selection) pek çok kez gereksiz yere kullanılmıştır.

Örnek Sub-Routine 2

ExcelToWordAutomaticDataTransfer - CreateWordDocument_Code2

Bu Sub-Routine’de With Statement sayesinde ilk Sub-Routine’e kıyasla çok daha derli toplu bir kod yazımı sağlanabilmiştir.

Şimdi her zaman olduğu gibi madde madde yazdığımız kodu detaylı bir şekilde inceleyellim.

 

 

 

Not_2

İlk 4 maddeyi üstte yer alan ‘Referanslama İşlemi’ alt başlığında açıkladığımız için 5 numaralı maddeden başlıyoruz.

2.1 Word Uygulamasına Belge/Yeni Sayfa Eklenmesi

    5 – wordUYG değişkenini Word.Application’a referansladığımız ve bir değer atadığımız için artık Word Uygulamasına ait bütün metot, property, enumerations v.b. kaynaklara wordUYG üzerinden ulaşabiliyoruz. Bu maddede de Word.Application’a .Documents nesnesi .Add metodu kullanılarak, açık olan uygulamaya yeni bir sayfa ekleniyor.

               wordUYG.Documents.Add

2.2 Eklenen Sayfa Üzerinde Çeşitli Formatlama İşlemlerinin Gerçekleştirilmesi

    6With wordUYG.Selection

    With Statement kullanarak yeni sayfayı seçiyor ve formatlama işlemlerini sadece yeni eklenen sayfa üzerinden gerçekleştirebiliyoruz. Yapmamız gereken sadece ‘Word.Selection’ ifadesi yazmamız gereken yere ‘.’ nokta koymak ve değiştirmek istediğimiz özellikleri(Properties) değiştirmek.

    7.ParagraphFormat.Alignment = wdAlignParagraphCenter

    Yazacağımız yazının yani paragrafın sayfayı ortalamasını sağlar.

    8 – .BoldRun

    Yazdığımız yazının kalın karakterli olmasını sağlar

    9 – .Font.Size = 20

    Yazı karakteri boyutunu 20 piksele yükseltir.

    10 – .Font.ColorIndex = wdDarkBlue

    Yazının rengini koyu maviye dönüştürür.

    11 – TypeText Sheet1.Range(“a”).Value

    TypeText metodu, word belgesine yazı yazmakta kullanılır. Parametresi (Type As Text)’tir. Ancak bu örnekte gördüğünüz gibi bir hücrenin değerini de yazı olarak word belgesine yazdırabilirsiniz. Sheet1.Range(“a1”) hücresinin değeri ise tabloda da görebileceğiniz üzere;”Marka ve Modele Göre Otomobil Fiyatları”dır.

    Bu örnekte aşağıda yer alan tablo kullanılmaktadır. 

 

    12 – .BoldRun 

    Kalın karakterde yazı yazma özelliğini BoldRun gibi açıyor ve yine .BoldRun yazarak kapatıyoruz. Bu satırdan sonra yazdıracağımız herhangi bir şey kalın yani BOLD olmayacaktır.

    13 – .TypeParagraph

     Yeni bir paragrafa başlamak için veya her halükarda bir alt satıra geçmek için kullanılır.

    14 – .Font.Size = 12 

    Tekrar yazı karakter büyüklüğünü değiştiriyoruz.

    15 – .Font.Name = “Times New Roman”

    Tahmin ettiğiniz üzere yazı tipini değiştiriyoruz.

    16 – .ParagraphFormat.Alignment = wdAlignParagraphLeft

    Sayfanın başında ortaladığımız paragrafı, sola dayalı şekle getiriyoruz. 

    17 – .TypeParagraph

    Bir alt satıra inerek paragraf başı yapılmasını sağlayan kod. 

    18End With 

    With Statement bu satır ile sonlandırılıyor.

2.3 Eklenen Word Belgesine Excel Çalışma Sayfasından Tablo Kopyalama

    Makrolar ile excel worksheetleri arasında veya workbooklar arasında yapılan kopyalama işlemleriyle aynı şekilde word belgelerine de kopyalama yapabiliyoruz.  Burada en büyük fark kopyaladığımız verilerin, word belgesine yapıştırılması esnasındaki farklı kopyalama seçeneklerinin sayısıdır. Biz örneğimizde sadece .Paste metodunu kullanıyoruz. Ancak siz diğer seçenekleri de tecrübe etmekte özgürsünüz.

ExcelToWordAutomaticDataTransfer - PasteOptions

    19 – Sheet1.Range(Range(“a1”), Range(“a1”).End(xlDown).End(xlToRight)).Copy

    Bu kodda Sheet1 üzerinde yer alan tabloyu kopyalıyoruz. Bu kopyalamayı yaparken daha sonra bu listenin genişleyebileceğini düşünerek statik bir aralık yerine, kendi yüksekliğini ve genişliğini ayarlayabilen dinamik aralık seçme yöntemini kullanyoruz. Dinamik aralık seçme ile ilgili olarak bildiklerini tazelemek isteyenler veya sıfırdan öğrenmek isteyenler aşağıdaki linkten ilgili dersin sayfasını ziyaret edebilirler. 

    Seçtiğimiz aralığı .Copy metodunu kullanarak geçici hafızaya kopyalıyoruz.

    wordUYG.Selection.Paste 

    Kodunu kullanarak da, kopyaladığımız tabloyu word belgesinin içine yapıştırıyoruz.

2.4 Word Belgesini Farklı Kaydetmek

    Eğer kaydedeceğimiz word belgesini farklı isimle kaydetmezsek her seferinde eski dosyanın üzerine veri yazılacaktır. Bu amaç doğrultusunda, SaveAs2 metodunu kullanıyor olacağız. Bu metot 2010 ile beraber SaveAs2 olarak isimlendirildi. Önceki versiyonlarda sadece ‘SaveAs’ olarak kullanılmaktaydı.

    “SaveAs2[Filename]” metodunun birden çok parametresi mevcuttur. Ancak biz burada tek zorunlu parametre olan ‘dosya ismi’ parametresini kullanacağız. Örnek olarak hazırlanan Sub-Routine’lerde kodun daha derli toplu olabilmesi açısından kaydedilecek dosya adı ilk önce tanımlanan bir değişkene atanmış, sonra ise SaveAs2 metodu içerisinde FileName parametresi olarak kullanılmıştır.

    ! – Dim DosyaKayitIsmi As String ‘___________!     

Satırı ile dosyanın kaydedileceği adresi taşıyacak değişken tanımlanmış,

    20 – DosyaKayitIsmi = “F:\macronimbus\Yazılar\23_ExcelToWord\Arac Envanteri ” _

    & Format(Now, “yyyy-mm-dd hh-mm-ss”) & “.docx” 

    Dosya isimlerinin otomatik olarak farklı kaydedilebilmesi için, verilen isme kaydedilen tarih ve saatin de yazılması uygun görülmüştür. Bu sayede dosya aynı adla kaydedilse dahi, tarih farklı olacağı için farklı kaydet işlemi sorunsuz gerçekleştirilecektir.

Not_3

    Burada tarih ve saati dosya adına eklerken  “.Now” fonksiyonunun default ayarında tarih ve saatleri birbirinden ayırırken kullandığı ‘:‘ işareti dosya uzantılarından kullanılmadığı için, .Now donksiyonunu .Format metodu kullanarak yerinden şekillendirdik ve ‘:‘ yerine ‘‘ kullanılmasını sağladık. 

     Normalde .Now fonksiyonun çıktısı = 30.01.2020 11:17:51  şeklinde olur ve noktalama işaretleri dosya klasör isimlerinde yer alamaz. Ancak Format metodu kullanırsak;

    Format(Now, “yyyy-mm-dd hh-mm-ss”) = 2020-01-30 11-19-49 

     noktalama işaretlerini dosya yolunda kullanılabilecek şekilde ‘:’ yerine ‘-‘ ile değiştirebiliriz.

    Hatta isterseniz gün ile yılların yerini değiştirebilir veya tarih ile saatin yerini değiştirebilirsiniz. 

 

    ipucu:

    Immediate Window içerisinde, başlarına ‘?’ koyup ‘Enter’e basarak, alacağınız sonuçları görebilirsiniz.

                                ?Format(Now, “dd-mm-yy hh-mm-ss”) = 30-01-20 11-22-14

                                ?Format(Now, “hh-mm-ss dd-mm-yy”) = 11-23-27 30-01-20

 

     Artık DosyaKayitIsmi değişkeni de tanımlandığına göre, SaveAs2 metodu ile beraber kullanabiliriz.

    21 – wordUYG.ActiveDocument.SaveAs2 DosyaKayitIsmi 

    Bu satır çalıştırıldığında, dosyanın kaydedildiği yerde dosya adı aşağıdaki gibi olmaktadır. Hazırlanan görsel ve şablon ile yazdığımız kodun tam olarak ne işe yaradığını görebilirsiniz.

 

     Dosya kaydedildiğinde görüntü aşağıdaki gibi olmaktadır.

ExcelToWordAutomaticDataTransfer - SaveAs2

 

Not_4

    Burada tarih ve saati dosya 

Eğer Dosyayı Office 2007 ve Sonrası Versiyonların Yüklü Olduğu Bilgisayarlarda Açacaksanız Dosya Uzantısı Olarak “.docx“,

Office 2003’ün Yüklü Olduğu Bilgisayarlarda Dosyayı Açacaksanız Dosya Uzantısı Olarak “.doc” Yazmanız Gerekmektedir.

 

2.5 Aktif Word Belgesinin Kapatılması

    22 – wordUYG.ActiveDocument.Close

    Bu satırda .Close metodu ile wordUYG.ActiveDocument metodunu kapatıyoruz.

2.6 Word Uygulamasının Kapatılması

    23 – wordUYG.Quit

    Bu satırda .Quit metodu ile açık olan word uygulamasını kapatıyoruz.

2.7 Değişken Referansının İptal Edilmesi

    24 – wordUYG.Quit

    Bu satırda word.Appliciation’a referansını taşıyan wordUYG değişkenini iptal ediyoruz. Bu satır, kodun çalışmasıyla alakalı bir işleve sahip değildir ancak geçici hafızanın temizlenmesinde faydalıdır.

2.7.1 Yazdığımız Sub-Routine'in Çalışmasına Ait Video

3. Bütün Office Versiyonlarında Çalışabilecek Şekilde Makronun Güncellenmesi

    Dersin başında da bahsettiğimiz üzere Word.Application uygulamasına Referanslama işlemi yaparken farklı Office versiyonları için farklı Object Library’lere Referanslama işlemi yapıyorduk(Hatırlamayanlar Hemen Sayfanın Başında İlgili Başlığı İnceleyebilir). Bu durum ise yazılan makronun sadece referanslama işlemi gerçekleştirilen versiyonlarda çalışmasına neden olmaktadır. Yani eğer Office 2010(Microsoft Word 14.0 Object Library)’a referanslama işlemi gerçekleştirdiyseniz, diğer versiyonlarda yazdığınız kod hata verip çalışmayacaktır. 

     Eğer kodunuzu başkalarıyla, özellikle makro bilmeyen birileriyle paylaşacaksanız, farklı office versiyonlarında çalışabilecek şekilde makronuzu geliştirmeniz herkes açısından faydalı olacaktır. Kodun geliştirilmesi gereken kısımları şimdi tek tek ele alalım.

    Alltaki görselde Sub-Routine’in geliştirilmesi gereken kısımları işaretlenmiş ve numaralandırılmıştır.

ExcelToWordAutomaticDataTransfer - GlobalCode

3.1. CreateObject() Metodu İle wordUYG Değişkeninin Tanımlanması

    Microsoft Word 14.0 Object Library gibi spesifik bir kütüphaneye referanslama yaptığımız zaman, diğer office versiyonlarında yazdığımız kodun çalışmadığını biliyoruz. Bu noktada değişkenimizi referanslama yapmadan “CreateObject” fonksiyonu kullanarak tanımlıyoruz.

İlk Hali

Geliştirilmiş Hali

Sub-Routine’in ilk olarak değiştirmemiz gereken kısmı bu. 

1- Değişkeni Object olarak tanımlıyoruz.

                              Dim wordUYG As Object

2- Değişken değerini CreateObject ile word uygulaması olacak şekilde atıyoruz.

                              Set wordUYG = CreateObject(“Word.Application”)

Not_5

    CreateObject fonksiyonu kullanarak değişkenimize değer atamanın çok büyük bir dezavantajı vardır. Microsoft Word Object Library‘e referanslama işlemi yapmamış olmamız demek, o kütüphanede yer alan metotlara, özelliklere, sınıflara v.b. ULAŞAMAYACAĞIZ demektir. Yani ‘IntelliSense‘i kullanamayız. Yani yazacağımız bütün metot v.b. ezberimizde olmalıdır, ki bu neredeyse imkansızdır. 

    Bu nedenle ilk önce “Microsoft Word Object Library”‘e referanslama yaparak kodu yazmanızı, kod yazma işlemi bittikten sonra kodunuzu “CreateObject” kullanarak bütün versiyonlarda kullanılacak şekilde geliştirmenizi şiddetle tavsiye ediyorum.

 

3.2. Microsoft Word Object Library'ye Ait Constant'ların Yerine Rakamsal Karşılıkların Yazılması

    Referanslama işlemi ile kod yazdığımızda metot ve özellikler ile birlikte “Microsoft Word Object Library” kütüphanesi altındaki Constant & Enumerations’ları da kullanmış oluyoruz. Bu durum ise eğer referanslama işlemi yapmıyorsak, excelin kullandığımız Constant ve Enumerations’ları tanımayacağı, haliyle hata vereceği anlamına geliyor. Bu kapsamda kod içine yazmış olduğumuz Constant ve Enumerations’ların sayısal değerlerini kodumuz içine entegre ediyoruz. Constant ve Enumeration ile ilgili hafızasını tazelemek isteyenler alttaki düğme ile dersin sayfasına göz atabilirler.

İlk Hali

    -Burada kodumuz içerisinde “Microsoft Word Object Library” e ait Constant’ları görebilmektesiniz. 

    -Bu Constantların sayısal karşılıklarını en rahat şekilde 

   –View–>Object–>Object Browser penceresinde görebilirsiniz. 

     Sizin için altta görselleri biz ekledik. Siz de aynı pencereyi açıp, farklı değerler ile kodu değiştirebilirsiniz.

    -Sol tarafta, yani ‘Object Browser’ penceresinde ‘WdParagraphAlignment’ Enumerations içerisinde yer alan Constant’ar görülmektedir. Eğer ‘wdAlignParagraphCenter’ Constant’ına tıklarsanız, pencerenin altında o constant’ın değeri çıkar. 

    Resimde görüldüğü gibi alt kısımda

    wdAlignParagraphCenter = 1    

    olarak değeri okunmaktadır. Eğer wdAlignParagraphLeft constant’ına tıklarsanız da

    wdAlignParagraphLeft = 0

    olarak Constant’ın karşılığını görebilirsiniz.

    Şimdi tek yapılması gereken, Constant’ların olduğu yere 1 ve 0 değerlerini yazmaktır.

 

 

    Aynı şekilde Sub-Routine içerisinde kullandığımız “wdDarkBlue” da Windows Word Object Library‘e ait bir constant’tır. 

    Yine Object Library vasıtasıyla bu constant’ın da değerini ‘9‘ olarak okuyabilmekteyiz.

    wdDarkBlue = 9

    Sub-Routine içerisinde wdDarkBlue yazısının olduğu yere de 9 yazarak Sub-Routine’i geliştiriyoruz.

Sub-Routine Kısmının Geliştirilmiş Hali

 

    7, 10, 16 numaralı satırları yukarıdaki değerleri kullanarak güncelliyoruz ve formatlama kısmını bütün office versiyonlarında çalışabilecek şekle getirmiş oluyoruz.

  .ParagraphFormat.Alignment = 1
  .Font.ColorIndex = 9
  .ParagraphFormat.Alignment = 0 

3.3. Çalışılan Microsoft Word Versiyonuna Göre Dosya Uzantısının Eklenmesi ".doc" / ".docx"

    Office 2003 ve öncesinde word belgelerinin isimlerinin uzantısı “.doc“, Office 2003’ten sonra ise “.docx” ‘tir.

    Buna göre kullandığımız Office versiyonunu “.Version“metodu ile öğrenerek bir adet If Koşullu Durum Bloğu oluşturuyoruz.

Dosya İsmini Veren Kodun İlk Hali

Dosya İsmini Veren Kodun Bütün Office Versiyonlarından Çalışmak Üzere Geliştirilmiş Hali

    Alt Başlık 1.1.1 Referanslama İşlemi konusunda yıllara göre versiyon numaralarını paylaşmıştım. Buna göre Office 2003 versiyon 11 olarak geçmektedir. Buradaki If bloğunda ise eğer versiyon 11’e eşitse ve daha küçükse uzantının “.doc”, değilse de “.docx” olması sağlanmıştır.

    Bu sayede hangi versiyon olursa olsun, dosya doğru uzantı ile kaydedilecek ve excel’in hata vermesi engellenecektir.

3.4. Çalışılan Microsoft Word Versiyonuna Göre Farklı Kaydet Metodunun Uygulanması "SaveAs" & "SaveAs2"

     Sub-Routine’de yapacağımız son değişiklik ise dosyanın kaydedilmesinde kullanılan SaveAs2 metodunun yine versiyona göre SaveAs olarak değiştirilmesidir. Alt Başlıl 1.2.4 Wrod Belgesinin Farklı Kaydedilmesi konusunda farklı kaydet metodunun 2010 ve sonrasında SaveAs2, öncesinde ise sadece SaveAs olarak kullanıldığının bilgisini vermiştim. Burada ise yine “.Version” metodunu bir If Koşullu Durum Bloğu içerisinde kullanarak, versiyona göre SaveAs veya SaveAs2 metodunun kullanılması sağlanmıştır.

Dosya İsmini Veren Kodun İlk Hali

 

Dosya İsmini Veren Kodun Bütün Office Versiyonlarından Çalışmak Üzere Geliştirilmiş Hali

    If bloğu ile versiyon numarası 12 olan Office 2007 ve öncesi için SaveAs metodunun, diğer versiyonlar içinse SaveAs2 metodunun kullanılması sağlanmaktadır.

3.5. Office Uygulamasının Her Versiyonunda Çalışabilecek Olan Sub-Routine'in Son Hali (Global Code)

4. Rapor Şablonu(Template) Kullanarak Word Belgesinde İstenilen Bölümlere Tablo ve Veri Aktarılması

    Belirli aralıklarda excel verileri kullanılarak hazırlanılan raporları hazırlamanın en iyi yolu, bu derste öğrenilen nasıl excel’den word’e otomatik veri aktarımı yapılacağının, word şablonları ile birlikte kullanılmasıdır. Bir kere hazırlanılan şablon sayesinde excel’de oluşturulmuş veriler ve bu verilerin metne dönüştürülmüş formatları, tek tuş ile word belgesine aktarılabilir. 

    Daha önceden şablon yani template kullanmamış kişiler şablonu belirli şekle sahip ayrıca üzerinde excelden kopyalanmış verilerin yapıştırılacağı noktaların işaretlendiği bir word belgesi olarak düşünülebilir. Mesela kapak sayfası, imza-onay sayfası, personel listesi ve standart bir girişi sayfası olan bir template oluşturulabilir. Sonrasında ise excelden her zaman kopyalanan tabloların isimleri(caption) yazılarak bu Caption’ların altına da “BOOKMARK” koyarak ilgili tablonun makro yardımıyla istenilen yerlere aktarılması sağlanabilir. Hatta tablodaki veriler okunarak matbu cümlelerin tablo altına açıklama olarak yazılması sağlanabilir. Yapılan bu çalışmalar sayesinde her seferinde sadece excel tablolarının güncellenmesi sağlanarak ve sonra tek tıkla bütün tablo ve açıklamalar word dosyasına aktarılmış ve yeni bir rapor oluşturulmuş olur. 

    “Excel’den Word’e Otomatik Veri Aktarımı” dersinin bu bölümünde, özelleştirilmiş word şablonlarının(template) oluşturması ve excel’den kopyalanan tabloların yapıştırılacağı bölgelerin belirlenmesi(bookmark) işlenecektir.

4.1. Şablon(Template) Oluşturulması

    Bookmark = Sayfada kalınan yere konulan işaret veya sayfa ayracı anlamındadır.     

    Şablon oluştururken, excelden aktarılacak olan tabloların yerinin belirlenmesi için kullanılan bookmark’ların isimlerinin, karışıklığa sebep olmayacak şekilde açıklayıcı olması, herkesin faydasına olacaktır. 

    İlk olarak boş bir word belgesi açılır. Sonra da isteğiniz metin, resim veya tabloların yapıştırılmasını istediğiniz noktalara Bookmark koyulur ve bu bookmark’lar isimlendirilir.

 

    

 

4.1.1. Bookmark Eklemek

    Açtığınız word belgesinde “INSERT” sekmesine tıklatın.

    Sonra Bookmark eklemek istediğiniz noktaya mouse ile tıklayın ve  “Links” bölümünün içinde yer alan “Bookmark” seçeneğine tıklayın.

4.1.2. Bookmark'a İsim Vermek

    Bookmark seçeneğine tıkladıktan sonra solda gördüğünüz pencere açılacaktır. 

    “Sort by: Name” seçeneği işaretlenmiş şekilde, üstte yer alan “Bookmark name:” in altına istediğiniz ismi yazabilirsiniz.

    Tekrardan hatırlatmak isterim, makroda bu isimleri Sub-Routine içerisinde kullanacağımız için, isimlendirmenin hatırlayacağınız ve tabloyu ifade eden şekilde olması gereklidir. Çalıştığımız örnekte kullandığımız tablo için “OzetTablo” ismini seçtik.

    Örnek olması için bir adet de chart oluşturduk ve bu chart nesnesinin geleceği yeri işaretlediğimiz “Bookmark“için de FinansalTablo ismini seçtik.

4.1.3. Word Belgesini Şablon-Template Olarak Kaydetmek

    Bookmark’ları istediğimiz yerlere koyduktan sonra dökümanı SaveAs diyerek “Word Template(*.dotx)” formatında kaydediyoruz. Kaydedeceğiniz yer 

    Bu işlemle beraber artık şablon hazır duruma geliyor. 

    

    # Bu derste kullanmak üzere hazırlanmış olan şablona, biraz daha gerçekçi olması amacıyla bir de kapak sayfası eklenmiştir. 

    # Ayrıca; “OzetTablo” isimli bookmark 2.sayfanın başına, “FinansalTablo” isimli bookmark ise 3.sayfanın başına eklenmiştir.

4.2. Revize Edilen Örnek Tablo ve Grafik

    Excel’den Word’e Otomatik Veri Aktarımı dersi boyunca kullandığımız tablonun sağ tarafına Satış Adedi ve Toplam(TL) isimli iki adet sütun daha eklenmiştir.

 

 

Finansal Tablo

4.3. Revize Edilen Sub-Routine ve Adım Adım Sub-Routine'in Detaylı Bir Şekilde İncelenmesi

4.3.1. Word Uygulamasının ve Değişkenlerin Tanımlanıp, Değerlerinin Atanması

   Sub-Routine’in ilk 9 maddesi bu bölümü oluşturmaktadır.

 

    1 – İlk olarak Word Uygulaması tipinde bir değişken tanımlıyoruz. (Burada Word ifadesini kullanmazsanız, da IntelliSense’de çıkacak 2 adet ‘Application’ ifadesinden alttakini seçtiğinizden emin olun. Üstteki her zaman Excel’e ait Application’dır(Kütüphane).

    2 – wordUYG değişkenine, yeni bir word Uygulaması değeri atanıyor.

    3 – Adından da anlaşılabileceği gibi ‘CokSatanMarka’ listenin en çok satan araba markasının ismini alacak değişkenin ismidir.

    4 – Adından da anlaşılabileceği gibi ‘CokSatanModel’ listenin en çok satan araba modelinin ismini alacak değişkenin ismidir.

    5 – ‘MaxSatisAdedi’ metin içerisinde refere edilecek olan ve otomatik olarak buldurulan en çok satan arabanın adedidir.

    6 – Bu satırda ilk önce “J” sütunun en üst hücresi ve en alt hücresi arasında(satırların toplamının bir üstüne kadar) yer alan bölgedeki en büyük sayı bulunuyor, sonrasında en büyük değerin olduğu hücreden sola doğru 8 adet hücre öteleniyor ve marka sütununa geliniyor. Bu sayede en çok satan otomobil markası, ‘CokSatanMarka’ değişkenine atanmış oluyor. 

    7 – Bu satırda ilk önce “J” sütunun en üst hücresi ve en alt hücresi arasında(satırların toplamının bir üstüne kadar) yer alan bölgedeki en büyük sayı bulunuyor, sonrasında en büyük değerin olduğu hücreden sola doğru 7 adet hücre öteleniyor ve marka sütununa geliniyor. Bu sayede en çok satan otomobil markası, ‘CokSatanModel’ değişkenine atanmış oluyor. 

    8 – Bu satırda “J” sütunun en üst hücresi ve en alt hücresi arasında(satırların toplamının bir üstüne kadar) yer alan bölgedeki en büyük sayı bulunuyor ve ‘MaxSatisAdedi’ değişkenine değer olarak atanıyor. 

     Artık bu değişkenlere metinler içerisinde referans edilerek, marka, model ve maksimum satış adedi değerleri metinlerin içerisine aktarılabilir.

 

     9 – Bu satırda .Add metoduna ‘Template’ parametresini giriyoruz ve boş bir word belgesi yerine daha önceden hazırlamış olduğumuz şablonun açılmasını sağlıyoruz. 

    Gördüğünüz gibi tırnak içerisinde “dosya yolu, dosya adı ve dosya uzantısını” girerek, basitçe istediğimiz dosyayı açıyoruz. İsteyenler ilk örnekte olduğu gibi bu dosya yolunu bir değişkene atayarak, burada parametre olarak o tanımladıkları değişkeni kullanabilirler. 

    Örnek

    Dim Sablon_SatisRaporu As String
    Sablon_SatisRaporu = "C:\Users\edagdelen\Desktop\ipad\Yazılar_ExcelToWord\SatisRaporu.dotx "
    uygulama.Documents.Add Sablon_SatisRaporu

Not_6

    WorksheetFunctions.Max Fonksiyonu Kullanım Şekli

4.3.2. OzetTablo Bookmark'ına Excel'deki Tablonun Aktarılması

    10 – Diğer örneklerde olduğu gibi basit bir şekilde tablonun alanını kopyalıyoruz. 

    11 – Bu satırda .GoTo metodunu ve metoda ait parametreleri kullanarak, şablon belgesine eklediğimiz bookmark’ların olduğu noktaları seçiyoruz. Faklı bir şekilde düşünecek olursak, imleci o noktaya taşıyoruz. 

 

    Bu kod satırda “.GoTo” metoduna ait 2 adet parametre kullanılmıştır. İlk parametre “what” parametresidir. Yani imlecin(cursor) nereye taşınacağının belirtildiği parametredir. Biz bookmark’a gitmek istediğimiz için 

     what:=wdGoToBookmark yazıyoruz. 

     İkinci kullanılan parametre ise, imlecin taşınmasını istediğimiz bookmark’tır. Buraya da bookmark’a verdiğimiz adı giriyoruz ve gerekli parametreleri girmiş oluyoruz. 

    Name:=”OzetTablo”

    12 – Veriyi yapıştırma seçeneklerinden ‘PasteExcelTable‘  metodunu seçiyoruz. Bu metot boolean tipinde 3 adet parametreye sahiptir. Örnekte görüğünüz gibi bu parametreleri de seçtiğinizde, word’e tablo aktarılacak ancak excel’e bağlantılı olmayacaktır. Aynı zaman da word tabloyu sığacak şekilde sayfaya yapıştıracaktır. 

     Excel bağlantılı word belgelerini bir sonraki derste göreceğiz.

 

4.3.3. OzetTablo'daki Veriler İle Metin Oluşturulması ve Tablonun Devamına Eklenmesi

    13 – Bu satıda .TypePAragraph ile bir alt satıra iniyoruz.

    14 – Burada yaptığımız tek şey excel tablosundaki veriler ile matbu cümlelerin birleştirilmesinden ibaret. Bizim örneğimizde ortaya çıkan metin;

    ‘Marka ve Modele Göre Otomobil Fiyatları’ Tablosu incelendiğinde gerçekleşen toplam satış adedi toplamda 121300 ve satıştan elde edilen toplam gelir ise 17711940000 TL’dir.

4.3.4. FinansalTablo Bookmark'ına Excel'deki Grafiğin Aktarılması

  15 – Bu satırda ilk önce workbook içerisindeki Chart3 nesnesine ve bu Chart3 nesnesinde ki grafik alanına referans yapılıyor. Eğer ChartArea yerine sadece Chart3 kopyalanmış olsaydı, sadece grafik değil, bütün Chart3 sayfası kopyalanmış olurdu. 

16 – Madde 11’de olduğu gibi imleç, istenilen bookmark’a, bu durumda “FinansalTablo”, bookmark’ına taşınıyor.

17 – Son olarak da kopyalanan nesne(ChartArea), belirtilen bookmark’ın bulunduğu noktaya yapıştırılıyor.

4.3.5. FinansalTablo'daki Veriler İle Metin Oluşturulması ve Grafiğin Devamına Eklenmesi

    18 – Bir alt satıra geçiyoruz. 

     19 – En üst kısımda tanımladığımı ve değer atadığımız değişkenleri, “CokSatanMarka, CokSatanModel, MaxSatisAdedi”, matbu cümleler ile beraber kullanarak kısa ancak açılayıcı bir metin oluşturup, grafiğin altına yazıyoruz. Bu örnek kapsamında oluşturulan metin;

    “Markaların Modellerine Göre Satış Rakamlarını Yansıtan Cizelgeyi İncelediğimizde Fiat Markasının Egea Modelinin 52000 Satış İle Yılı Lider Kapattığını Görüyoruz.”

 

4.3.6. Sub-Routine'in Kaydedilmesi ve Kapatılması

     Bu bölümdeki maddeler, açık olan word belgesinin farklı kaydedilerek kapatılmasını sağlayan kodlardır. Diğer örnkerde detaylı bir şekilde açıklanmışlardır. 

Sub-Routine çalıştırdıktan sonra tablo ve grafiğin hazırlamış olduğumuz template içerisine nasıl kopyalandığını aşağıdaki görselde görebilirsiniz.

Dünya Çapında Araştırmacılara Ait Çalışmaları Okumak İsterseniz https://www.researchgate.net/profile/Ender_Dagdelen adresini Ziyaret Edebilirsiniz. Ana Sayfaya Dönmek İsterseniz De Aşağıdaki Tuşu Tıklayınız.

Bir Sonraki Derste Kendi Bağlantılarını, Dosyaların Yeri vb. Değişse Dahi Koruyabilen Word Belgelerini Oluşturmayı Öğreneceğiz.

Bir Sonraki Derste Ders 29’da Görüşmek Üzere.

Herkese İyi Çalışmalar

[email protected]