Zulkifli Aminuddin
by on December 27, 2016
1,288 views
Ini adalah tulisan ketiga saya tentang VBA Word. Kali ini, kita akan membedah arti dari source code program VBA Word yang ditulis pada dua artikel sebelumnya. Di artikel pertama source code-nya disimpan dalam Macro yang bernama “Tempel_Simpan”, dan di artikel kedua bernama “FormatDoc”. Dan, di artikel ketiga ini keduanya akan digabungkan menjadi satu dan disimpan dalam Macro dengan nama “Tempel_Simpan_Format”. Meskipun Macro ketiga ini adalah hasil dari penggabungan dari kedua Macro sebelumnya, tapi kita akan membuat revisi terhadap source code-nya untuk mendapatkan hasil yang lebih baik, yaitu: nama dokumen lebih bersifat informatif karena sama dengan judul artikel, tetapi konsekwensinya source code menjadi sangat panjang. Berikut adalah source code dari Macro “Tempel_Simpan Format”: ----------------------------------------------- Sub Tempel_Simpan_Format() '''''''''''''''''' ''''' Tempel ''''' '''''''''''''''''' Documents.Add Template:="Normal" Selection.PasteAndFormat (wdFormatOriginalFormatting) '''''''''''''''''' ''''' Simpan ''''' '''''''''''''''''' Selection.HomeKey Unit:=wdStory Selection.Find.Text = "^p" Selection.Find.Execute Selection.MoveLeft Unit:=wdCharacter, Count:=1 Selection.HomeKey Unit:=wdStory, Extend:=wdExtend Selection.Copy Selection.HomeKey Unit:=wdStory Selection.TypeParagraph Selection.HomeKey Unit:=wdStory Selection.PasteAndFormat (wdFormatPlainText) Selection.Find.Text = "^p" Selection.Find.Execute Selection.MoveLeft Unit:=wdCharacter, Count:=1 Selection.HomeKey Unit:=wdStory, Extend:=wdExtend Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = ":" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = "/" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = "?" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = "<" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = ">" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = "\" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = "*" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = "|" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = """" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll n = Selection.Text Selection.TypeBackspace Selection.EndKey Unit:=wdStory Selection.TypeParagraph t = Now() Selection.Text = t With Selection.Find .Text = "/" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = ":" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll g = Selection.Text Selection.TypeBackspace ActiveDocument.SaveAs2 FileName:=n & " (" & g & ")" & ".docx" '''''''''''''''''' ''''' Format ''''' '''''''''''''''''' Selection.WholeStory With Selection.ParagraphFormat .SpaceBeforeAuto = True .SpaceAfterAuto = True .LineSpacingRule = wdLineSpaceSingle .Alignment = wdAlignParagraphJustify End With With ActiveDocument.PageSetup .Orientation = wdOrientPortrait .TopMargin = CentimetersToPoints(4) .BottomMargin = CentimetersToPoints(3) .LeftMargin = CentimetersToPoints(4) .RightMargin = CentimetersToPoints(3) .PageWidth = CentimetersToPoints(21) .PageHeight = CentimetersToPoints(29.7) End With Selection.HomeKey Unit:=wdStory Selection.Delete Selection.Find.Text = "^p" Selection.Find.Execute Selection.MoveLeft Unit:=wdCharacter, Count:=1 Selection.HomeKey Unit:=wdStory, Extend:=wdExtend Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter Selection.HomeKey Unit:=wdStory End Sub --------------------------------------------------- Untuk melihat efek dari Macro ini, copy source code VBA Word diatas ke jendela Visual Basic Editor, dan buat tombol shortcut di Quick Access Toolbar untuk mengeksikusinya dengan sekali klik. Untuk menghemat ruang penulisan, saya tidak akan menjelaskan langkah-langkahnya lagi disini. Bila Anda belum tahu, silahkan membaca dua artikel saya sebelumnya. Baik macro maupun shortcut-nya, saya sendiri sudah membuatnya, seperti dalam gambar berikut. Pembahasan Macro “Tempel_Simpan_Format” Setiap Macro VBA selalu diawali dengan “Sub NamaMacro ()” (dalam hal ini NamaMacro adalah “Tempel_Simpan_Format”) dan diakhiri dengan “End Sub”. Baris perintah yang diawali dengan karakter “’” (tanda petik satu) tidak dieksekusi karena ia hanyalah komentar, untuk itu saya menggunakannya untuk membatasi pembagian Macro. Untuk lebih memudahkan pembahasannya, saya membagi Macro diatas menjadi tiga bagian: 1. Tempel Baris-baris perintah “Tempel” terlihat seperti dibawah ini: ----------------------------------- Documents.Add Template:="Normal" Selection.PasteAndFormat (wdFormatOriginalFormatting) ----------------------------------- Arti baris perintah tersebut adalah: Menambah dokumen baru dengan atribut, Template Normal. (sama dengan mengklik File->New atau Menekan tombol Ctrl + N pada Keyboard), kemudian menempelkan artikel yang sudah ada di clipboard ke halaman dokumen baru tersebut dengan format yang sama dengan asalnya. (sama dengan mengklik Home->Paste Option->Keep Source Formatting (K)) 2. Simpan Baris-baris perintah “Simpan” sangat panjang, tapi kita akan mencoba memotong-motongnya: ------------------------------------------- Selection.HomeKey Unit:=wdStory Selection.Find.Text = "^p" Selection.Find.Execute Selection.MoveLeft Unit:=wdCharacter, Count:=1 Selection.HomeKey Unit:=wdStory, Extend:=wdExtend ------------------------------------------ Arti dari perintah diatas adalah: memindahkan pointer mouse ke awal dokumen (seperti menekan tombol Ctrl + Home pada keyboard), kemudian mencari karakter paragraf dan dari posisi karakter paragraf pertama yang ditemukan pointer lalu dipindahkan sejauh satu karakter ke kiri (sama dengan menekan tombol Left pada Keyboard), kemudian pointer dipindahkan lagi ke awal dokumen sambil membuat blok seleksi (seperti menekan tombol Ctrl + Shift + Home pada keyboard). ---------------------------------------------------- Selection.Copy Selection.HomeKey Unit:=wdStory Selection.TypeParagraph Selection.HomeKey Unit:=wdStory Selection.PasteAndFormat (wdFormatPlainText) ----------------------------------------------------- Arti dari perintah diatas adalah: menyalin bagian yang sudah terseleksi dalam hal ini adalah judul artikel ke clipboard, kemudian memindahkan pointer mouse ke awal dokumen, kemudian menekan karakter paragraf, kemudian memindahkan lagi pointer mouse ke awal dokumen, kemudian menempelkannya dengan format Plain Text (sama dengan mengklik Home->Paste Option->Keep Text Only). ----------------------------------------------------. Selection.Find.Text = "^p" Selection.Find.Execute Selection.MoveLeft Unit:=wdCharacter, Count:=1 Selection.HomeKey Unit:=wdStory, Extend:=wdExtend ----------------------------------------------------- Arti dari perintah diatas adalah: mencari karakter paragraf, dari karakter paragraf pertama yang ditemukan pointer lalu dipindahkan sejauh satu karakter ke kiri (sama dengan menekan tombol Left pada Keyboard), kemudian pointer dipindahkan lagi ke awal dokumen sambil membuat blok seleksi (seperti menekan tombol Ctrl + Shift + Home pada keyboard). ----------------------------------------------------- Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = ":" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll ---------------------------------------------------- Arti dari perintah diatas adalah: membersihkan format find and replacement, kemudian mencari semua text “:” (titik dua) dan menggantinya dengan text “_” (hal ini penting karena nama dokumen Ms. Word tidak boleh mengandung karakter “:” ). ---------------------------------------------------- With Selection.Find .Text = "/" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll ---------------------------------------- Arti dari perintah diatas adalah: mencari semua text “/” dan menggantinya dengan text “_” (hal ini penting karena nama dokumen Ms. Word tidak boleh mengandung karakter “/” ). ---------------------------------------- With Selection.Find .Text = "?" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = "<" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = ">" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = "\" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = "*" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = "|" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = """" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll -------------------------------------------------- Arti dari perintah diatas adalah: sama dengan bagian sebelumnya mencari semua text "?", "<", ">", "\", “*”, "|”, """ dan menggantinya dengan text “_” (hal ini penting karena nama dokumen Ms. Word tidak boleh mengandung karakter "?", "<", ">", "\", “*”, "|”, """ ). -------------------------------------------------- n = Selection.Text Selection.TypeBackspace --------------------------------------------------- Arti dari perintah diatas adalah: mengambil Text yang terseleksi dalam hal ini judul artikel yang sudah dibersihkan dari kemungkinan karakter yang tidak boleh termasuk dalam nama file dan menyimpannya ke dalam variabel n, kemudian mengetikkan Backspace sehingga Text yang masih terseleksi tersebut akan terhapus (kita tidak memerlukan Text itu lagi karena nilainya sudah disimpan dalam variabel n). --------------------------------------------------- Selection.EndKey Unit:=wdStory Selection.TypeParagraph t = Now() Selection.Text = t ------------------------------------------------- Arti dari perintah diatas adalah: memindahkan pointer mouse ke akhir dokumen (sama dengan menekan tombol Ctrl + End pada Keyboard), kemudian mengetikkan paragraf, kemudian memanggil fungsi Now() untuk mengambil waktu system dan menyimpan ke dalam variabel t, kemudian mengetikkan dan menyeleksi Text dengan nilai yang tersimpan dalam varibel t (dalam hal ini waktu system, yaitu: tanggal dan jam secara berturut-turut dalam format dd/mm/yyyy ss:mm:hh). ------------------------------------------------- With Selection.Find .Text = "/" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = ":" .Replacement.Text = "_" .Forward = True .Wrap = wdFindStop End With Selection.Find.Execute Replace:=wdReplaceAll ------------------------------------------- Arti dari perintah diatas adalah: mencari semua text “/” pemisah tanggal dan text “:”pemisah jam dan menggantinya dengan text “_” (hal ini penting karena nama dokumen Ms. Word tidak boleh mengandung karakter "/" dan”:”). ------------------------------------------- g = Selection.Text Selection.TypeBackspace ActiveDocument.SaveAs2 FileName:=n & " (" & g & ")" & ".docx" -------------------------------------------- Arti dari perintah diatas adalah: mengambil text yang terseleksi dan menyimpannya ke dalam variabel g (dalam hal ini tanggal dan waktu system yang sudah dimodifikasi tanda pemisahnya supaya bisa diterima sebagai bagian dari nama file Ms. Word), kemudian mengetikkan Backspace pada text tersebut untuk menghapusnya karena nilainya sudah disimpan dalam variabel g, kemudian menyimpan dokumen aktif dengan nama yang diambil dari nilai variabel n (dalam hal ini judul artikel yang sudah dimurnikan) ditambah kurung buka dan spasi ditambah tanggal dan waktu system (yang juga sudah dimurnikan) yang tersimpan dalam variabel n ditambah kurung tutup dan terakhir ditambah extensi file Ms. Word sendiri yaitu “.docx”). -------------------------------------------- 3. Format Baris-baris perintah “Format” juga akan dipotong-potong untuk memudahkan pembahasan: ------------------------------------------- Selection.WholeStory With Selection.ParagraphFormat .SpaceBeforeAuto = True .SpaceAfterAuto = True .LineSpacingRule = wdLineSpaceSingle .Alignment = wdAlignParagraphJustify End With ---------------------------------------------- Arti dari perintah diatas adalah: menyeleksi semua bagian dokumen dari awal sampai akhir (sama dengan menekan Ctrl + A pada keyboard), kemudian memformat paragraf yang terseleksi dengan spasi sebelum dan sesudah paragraf masing-masing di-set ke nilai Auto, jarak spasi tunggal, dan perataan teks rata kiri-kanan (Alignment: Justified). ---------------------------------------------- With ActiveDocument.PageSetup .Orientation = wdOrientPortrait .TopMargin = CentimetersToPoints(4) .BottomMargin = CentimetersToPoints(3) .LeftMargin = CentimetersToPoints(4) .RightMargin = CentimetersToPoints(3) .PageWidth = CentimetersToPoints(21) .PageHeight = CentimetersToPoints(29.7) End With ---------------------------------------------- Arti dari perintah diatas adalah: melakukan setup halaman pada dokumen aktif dengan orientasi kertas berdiri (orientation: Portrait), Margin Atas 4 cm, Margin Bawah 3 cm, Margin Kiri 4 cm dan Margin Kanan 3 cm, Lebar Halaman 21 cm, dan Tinggi Halaman 29,7 cm (sama dengan ukuran kertas A4). ---------------------------------------------- Selection.HomeKey Unit:=wdStory Selection.Delete Selection.Find.Text = "^p" Selection.Find.Execute Selection.MoveLeft Unit:=wdCharacter, Count:=1 Selection.HomeKey Unit:=wdStory, Extend:=wdExtend Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter Selection.HomeKey Unit:=wdStory ----------------------------------------------- Arti dari perintah diatas adalah: memindahkan pointer mouse ke awal dokumen (sama dengan menekan tombol Ctrl + Home pada keyboard), menekan delete (untuk menghapus satu karakter ke kanan, membuang satu karakter paragraf di awal dokumen), kemudian mencari karakter paragraf, dari karakter paragraf pertama yang ditemukan pointer lalu dipindahkan sejauh satu karakter ke kiri (sama dengan menekan tombol Left pada Keyboard), kemudian pointer dipindahkan lagi ke awal dokumen sambil membuat blok seleksi (seperti menekan tombol Ctrl + Shift + Home pada keyboard), kemudian memformat paragraf yang terseleksi dengan perataan teks rata tengah (Alignment: Center), kemudian memindahkan pointer mouse ke awal dokumen (sama dengan menekan tombol Ctrl + Home pada keyboard). Itulah arti dari source code Macro VBA “Temple_Simpan_Format”. Algoritma yang saya tulis mungkin saja bukan algoritma terbaik yang bisa diterapkan pada Macro tersebut. Tapi ini hanyalah pengenalan terhadap VBA Word, jadi selama algoritma itu masih bisa dieksekusi dengan baik dan tidak error, seharusnya ia bukanlah masalah. Sekian dan Terima Kasih.
Be the first person to like this.