Panduan VBA Excel: Module dan Procedure #03

 ini kita sdh belajar menulis beberapa baris kode VBA excel sederhana Panduan VBA Excel: Module & Procedure #03

Pada bagian pertama seri panduan VBA Excel Dasar ini kita sdh belajar menulis beberapa baris kode VBA excel sederhana. Pada halaman tersebut dijelaskan bahwa diantara langkah-langkah untuk menyusun sebuah kode macro VBA adalah membuka VBE kemudian membuat sebuah modul baru.

Penjelasan lebih lanjut mengenai VBE atau Visual Basic Editor bisa anda pelajari pada bagian kedua seri Tutorial VBA Dasar ini, se&gkan pada bagian ketiga ini Anda akan kmi ajak untuk mengenal lebih jauh tentang apa itu Module & Procedure pada VBA Excel.

Saya kira pembahasan ini cukup penting & masih jarang sekali ada yg membahasnya. Meskipun hanya sebatas gambaran umum, dengan panduan ini harapannya Anda yg masih mulai belajar VBA akan mendapatkan gambaran bagaimana & dimana harus menuliskan script-script VBA secara benar.



Module Pada VBA Excel


Bagaimana pengertian module pada VBA Excel?

Dalam pengertian yg sederhana modul dapat diartikan sbgai tempat untuk menyimpan kode-kode VBA. Jika VBE adalah sebuah rumah anda dapat membaygkan kamar-kamar atau ruangan pada rumah tersebut sbgai sebuah modul, dimana pada masing-masing kamar atau ruangan tersebut tersimpan berbagai macam barang lain dengan fungsi-fungsi tertentu.

Barang lain yg dimaksudkan dlm pembahasan VBA ini adalah Procedure VBA yg didlmnya termuat kode-kode program dengan fungsi & tujuan tertentu.

Pada VBA Excel, setidaknya dikenal ada 4 macam tipe Module sbgai brkut:
  1. Standart Module:
    Biasa disebut sbgai modul kode atau modul saja adalah jenis modul umum yg dapat diisi dengan banyak prosedur dan fungsi-fungsi tertentu. Tipe modul inilah yg akan sering anda gunakan dlm menyusun kode-kode VBA.
  2. Workbook & Sheet Module
    Adalah modul khusus yg terikat langsung pada objek Workbook & Sheet. Modul untuk workbook disebut ThisWorkbook, & modul untuk setiap sheet atau Lembar kerja memiliki nama yg sama dengan nama sheetnya. Jenis modul ini sebenarnya mirip dengan Standart Module, hanya saja pada jenis ini dapat juga diisi dengan event procedures.

    Event procedure ini semacam detonator atau pemicu aktifnya sebuah kode. Jika anda sdh pernah mengenal VBA saya kira anda sdh cukup faham bahwa untuk menjalankan sebuah kode butuh pemicu tertentu semisal klik pada sebuah tombol. Selain menggunakan tombol sebuah kode juga bisa berjalan dlm kondisi tertentu. Kondisi atau aktifitas yg terjadi pada object VBA inilah yg dimaksud dengan Event, misal kita ingin menjalankan beberapa baris kode saat file dibuka, saat sebuah sheet aktif & lain sbgainya, maka event procedure inilah yg kita butuhkan. Lebih lanjut mengenai event procedure ini akan kita bahas lain waktu.
  3. User Forms
    Merupakan jenis modul yg adalah bagian dari objek UserForm, & berisi prosedur-prosedur VBA dan event procedure untuk kontrol-kontrol yg terkait dengan objek Form.
  4. Class Module
    Modul jenis ini digunakan untuk membuat sebuah objek baru pada VBA. Untuk saat ini anda tidak perlu terlalu memikirkan jenis modul ini.

Pada modul-modul inilah nantinya Anda akan menempatkan & mengelompokkan prosedur-prosedur VBA sesuai kebutuhan.

 ini kita sdh belajar menulis beberapa baris kode VBA excel sederhana Panduan VBA Excel: Module & Procedure #03

Pada saat membuat sebuah file excel, kemudian membuka VBE maka excel secara otomatis sdh menyiapkan modul workbook & modul sheet sejumlah sheet yg terdapat pada file tersebut. Defaultnya ada tiga modul sheet yg bisa anda kurangi atau anda tambahkan sesuai kebutuhan. Adapun untuk jenis modul yg lain anda harus menambahkannya secara manual melalui menu insert sprti yg sdh dijelaskan pada panduan sebelumnya.

Tipe Modul 2 & 3 atau Modul Workbook, sheet & User forms biasa juga disebut sbgai Object Module sebab modul-modul ini memiliki bentuk nyata berupa Workbook, WorkSheet, Userform, Chart, & lain-lain. Umumnya kode-kode VBA yg terdapat pada modul ini hanya berlaku pada object terkait. Misal pada Modul Sheet1 maka kode-kode yg kita buat didlmnya hanya berlaku untuk Sheet1 saja & tidak bisa dipanggil untuk Sheet2.

Adapun Standart Modul atau Modul Tipe 1 biasa disebut juga sbgai Code Module (Modul Kode) adalah wadah untuk seluruh prosedur atau variabel yg bisa digunakan oleh module yg lainnya juga, selama prosedur atau variabel tersebut dideklarasikan sbgai Public.

Anda bisa menambahkan Code Module ini sebanyak yg dibutuhkan, meskipun sebenarnya kita cukup membuat satu standart module saja untuk menempatkan kode-kode VBA, hanya saja jika kode-kode itu terlalu kompleks ada kalanya kita butuh mengelompokkan prosedure-prosedur yg kita buat didlm modul tersebut dengan tujuan memudahkan dlm hal menejemen kode.

Beberapa kali saya menyebutkan istilah procedure, sebenarnya barang macam apa sih ini?

Procedure Pada VBA Excel


Procedure adalah blok kode program yg berisi baris-baris perintah tertentu di antara baris statement pembuka prosedure & statement penutup prosedure untuk mengerjakan tugas atau tindakan tertentu.

Apabila di dlm kode program atau project VBA yg kita buat ada perintah-perintah untuk melakukan tugas atau aktifitas yg sama di beberapa tempat, maka akan lebih baik perintah-perintah tersebut dibuat dlm sebuah procedure. Kemudian, procedure itu bisa di-panggil pada procedure lainnya saat diperlukan.

Penggunaan procedure sangat menghemat penulisan kode program, karena kode-kode program yg sama dibeberapa tempat cukup dibuat pada satu bagian saja. Selain itu, keberadaan procedure akan memudahkan perbaikan bila terjadi perubahan atau kesalahan, karena perbaikan cukup dilakukan pada satu bagian saja.

Struktur Procedure VBA Excel


Struktur deklarasi sebuah prosedur VBA terdiri dari 3 bagian:
  1. Statement Pembuka atau Awal
  2. Kode program
  3. Statement Penutup atau akhir

Sebuah procedure yg dituliskan pada sebuah modul selalu diawali dengan statement pembuka & diakhiri dengan sebuah statemen penutup. Kemudian kode-kode program yg dilakukan oleh procedure tersebut dituliskan diantara kedua statement tersebut.

Perhatikan contoh procedure sederhana brkut:

 ini kita sdh belajar menulis beberapa baris kode VBA excel sederhana Panduan VBA Excel: Module & Procedure #03

Seperti terlihat pada contoh prosedur di atas, cara penulisan sebuah prosedur sederhana setidaknya sprti dibawah ini:

[Scope] JenisProsedur NamaProsedur() 'Baris kode program 1, dst. End JenisProsedur

Perintah "MsgBox" pada VBA digunakan untuk menampilkan sebuah kotak pesan dengan isi pesan tertentu. Detail tenang perintah-perintah ini akan kita bahas lain waktu.

Selanjutnya akan kita pelajari penjelasan umum untuk masing-masing bagian pada prosedur VBA.

Deklarasi Statement Procedure


Statement pembuka atau deklarasi sebuah prosedure setidaknya harus memuat 3 hal:

[Scope] JenisProsedur NamaProsedur()

Ketiga hal diatas adalah bentuk tersederhana dlm deklarasi prosedure. Jadi, setiap deklarasi prosedur, minimal akan selalu berisi 3 hal tersebut, yaitu: scope, jenis prosedur, nama prosedur.

Sebenarnya statement deklarasi sebuah prosedur VBA tidak hanya ini saja, ada beberapa keyword lain yg juga bisa Anda dankan, hanya saja untuk menyederhanakan pembahasan, 3 bagian utama deklarasi ini saya kira sdh cukup untuk saat ini.

Istilah statement yg dapat juga dimaknai sbgai sebuah instruksi pada VBA merujuk pada 2 hal:
  • Declaration statements atau Pernyataan deklarasi, sprti yg tersirat dari namanya, digunakan untuk menyatakan sesuatu sprti variabel atau konstanta. Pada procedure VBA pernyataan deklarasi berisi keyword-keyword yg mengandung maksud tertentu.
  • Executable statements atau Pernyataan ekseskusi adalah pernyataan untuk melakukan tindakan atau aktifitas tertentu yg harus dilakukan, umumnya statement ini adalah kode-kode program didlm sebuah procedure.

Scope Pada VBA Excel


Karena pembahasan Procedure juga melibatkan Scope, maka saya kira penting untuk memberikan gambaran umum tentang Scope pada VBA Excel.

Istilah Scoope digunakan untuk menggambarkan bagaimana sebuah variabel dapat diakses & bagaimana sebuah prosedur dapat dipanggil. Hal ini bergantung pada di mana & bagaimana sebuah variabel atau prosedur dideklarasikan. Istilah visibilty juga digunakan untuk menggambarkan scope(ruang lingkup). Kedua istilah ini setara.

Ada 4 level scope dari ruang lingkup terkecil sampai terbesar:
  1. Procedure:
    Variabel yg digunakan secara lokal dlm prosedur itu saja & tidak bisa diakses oleh prosedur dari module lain secara langsung. Usia pakai variabel adalah selama prosedur itu diproses. Jika prosedur tlah selesai diproses, maka variabel dibuang dari memori komputer.
  2. Module:
    Prosedur atau variabel yg digunakan oleh seluruh prosedur yg ada dlm module tersebut & tidak dapat diakses secara langsung oleh prosedur dari module lain.
  3. Project:
    Prosedur atau variabel yg digunakan oleh seluruh prosedur yg ada dlm VBAProject tersebut. Usia pakainya adalah sejak VBAProject di-load ke memori komputer, yaitu sesaat setlah melewati security macro, sampai saat workbook selesai ditutup.
  4. Global:
    Prosedur, variabel, atau class yg digunakan oleh seluruh prosedur dari VBAProject lain. Pintu penggunaannya adalah dengan membuat referensi ke VBAProject yg dibutuhkan. Misal, VBAProject1 memiliki prosedur, variabel, atau class yg ber-scope global. VBAProject2 bisa menggunakan apa yg ada di VBAProject1 jika VBAProject2 menambahkan VBAProject1 dlm referensinya.

Scope dideklarasikan dengan keyword tertentu:
  • Public
    Dengan menggunakan Keyword "Public" pada dasarnya variabel atau prosedur bisa digunakan dimana saja.
  • Private
    Dengan menggunakan Keyword "Private" pada dasarnya, variabel atau prosedur hanya bisa digunakan oleh module yg menggunakan keyword ini.
  • Friend
    Keyword ini khusus untuk object & class module saja & digunakan oleh VBProject dimana keyword Friend digunakan.
  • Dim
    Keyowrd ini digunakan untuk khusus untuk mendeklarasikan sebuah variabel. Pada dasarnya, hanya bisa digunakan oleh kode program yg ada setlah baris deklarasi variabel.

Pembahasan mengenai scope ini sebenarnya cukup panjang & biasanya akan cukup membingungkan jika anda baru mengenal VBA Excel. Untuk tahap pengenalan VBA ini gunakan saja cara praktis pemakaiannya sbgai brkut :
  1. Gunakan Dim untuk mendeklarasikan variabel didlm prosedur saja.
  2. Gunakan Private untuk variabel atau prosedur yg hanya boleh digunakan atau dipanggil didlm module tersebut saja.
  3. Gunakan Public untuk variabel atau prosedur yg boleh digunakan dimana saja didlm VBProject tersebut.

Tipe atau Jenis Procedure VBA Excel


Secara umum ada 2 tipe procedure pada VBA, yakni Sub Procedure & Function Procedure.
  • Sub Procedure
    Sub Procedure adalah sebuah procedure yg hanya menjalankan aktifitas tertentu tanpa menghasilkan sebuah nilai (Value). Aktifitas pada procedure ini tergantung pada baris-baris perintah yg terdapat pada procedure tersebut.
  • Function Procedure
    Function Procedure adalah sebuah procedure yg menghasilkan sebuah nilai (Value).

    Anda tentu sdh mengenal berbagai macam functions atau fungsi excel semisal fungsi SUM, AVERAGE & lain sbgainya. Cara kerja Function Procedure ini sangat mirip dengan fungsi-fungsi excel ini. Hanya saja fungsi-fungsi tersebut memang sdh ada didlm excel. Jika kita membutuhkan fungsi tertentu yg belum ada, Anda bisa membuat sebuah fungsi khusus yg sering disebut sbgai UDF (User Defined Functions) semisal fungsi terbilang excel.

Lain waktu akan kita ulas lebih dlm tentang kedua tipe procedure ini pada sebuah artikel tersendiri. Untuk saat ini slahkan Anda biasakan dulu untuk menggunakan prosedur dengan tipe Sub terlebih dahulu.

Selain kedua jenis prosedur di atas sebenarnya masih ada jenis prosedur lainnya pada VBA excel yakni Jenis Property Procedure.

Prosedur jenis ini digunakan untuk mengisi nilai ke sebuah variabel atau mengambil nilai dari sebuah variabel.

Umumnya jenis prosedur property digunakan ketika membentuk sebuah custom class dlm Class Module. Jadi, pada dasarnya, prosedur jenis ini bisa digunakan dimana saja sprti halnya prosedur jenis Sub maupun Function.
Prosedur property terdiri dari :

  1. Let: untuk memasukkan nilai kedlm variabel selain object & kerjanya mirip dengan penggunaan jenis Sub
  2. Set: untuk memasukkan nilai kedlm variabel object & kerjanya mirip dengan penggunaan jenis sub
  3. Get: untuk mengambil nilai dari suatu variabel & kerjanya mirip dengan jenis Function

Lain waktu akan kita bahas tentang property, namun sebelum itu Anda harus sdh memahami dulu tentang Tipe Sub & Function.

Nama Procedure VBA Excel


Sebuah Prosedur harus diberi nama. Aturan utama yg harus Anda ikuti saat menamai sebuah prosedur VBA adalah sbgai brkut:
  1. Karakter pertama harus berupa Letter Abjad (A-Z,a-z).
  2. Karakter brkutnya dapat berupa huruf, angka atau karakter tanda baca tertentu (tidak semua tanda baca bisa digunakan).
  3. Tidak boleh memakai titik (.) Dan spasi ( ) juga tidak bisa memakai karakter brkut: #, $,%, &, @, ^, * & !.
  4. Tidak ada perbedaan antara huruf besar & huruf kecil.
  5. Jumlah maksimum karakter yg bisa digunakan adalah 255.

Penjelasan lain mengenai aturan menamai procedure ini bisa anda baca pada halaman microsoft brkut.

Sebaiknya nama yg digunakan untuk sebuah procedure itu deskriptif, bermakna & tidak ambigu sehingga dapat mewakili tujuan atau fungsi dari prosedure tersebut. Dengan demikian saat anda membaca namanya saja anda akan dengan mudah mengetahui maksud dari isi kode program pada procedure tersebut. Jadi jangan asal-asalan membuat sebuah nama procedure sehingga Anda akan dibuat bingung saat sebuah project VBA sdh memuat banyak procedure.

Baris Kode Program VBA Excel


Baris kode umumnya adalah sebuah Executable statements, adalah sebuah baris program yg berisi perintah VBA untuk melakukan sesuatu yg tentunya harus mengikuti kaidah-kaidah penulisan VBA.

Baris kode pada sebuah prosedur VBA selalu diproses baris per baris. Jadi bedakan antara baris program & baris penulisan.

Baris program pastilah selalu satu baris. Satu baris program ini bisa ditulis dlm beberapa baris penulisan & ada kemungkinan beberapa baris program ditulis dlm satu baris penulisan.

Dalam penulisan baris program, terdapat beberapa karakter khusus yg memiliki arti atau tujuan khusus, antara lain :
  • Tanda petik tunggal (')
    Karakter ini menandakan bahwa mulai dari karakter petik tunggal ini adalah sebuah keterangan atau teks yg tidak perlu diproses. Teks atau keterangan ini umumnya digunakan untuk memberikan penjelasan pada baris-baris kode VBA.
  • Underscore (_)
    Karakter ini menandakan pindah baris penulisan untuk satu baris program tersebut. Jika sebuah baris kode program cukup panjang, gunakan underscore untuk menandai bahwa baris brkutnya adalah kelanjutan dari baris program tersebut.
  • Titik dua (:)
    Karakter ini digunakan untuk menandai akhir sebuah baris program. Titik dua (:) ini adalah kebalikan dari karakter underscore (_). Jika Underscore digunakan untuk memisahkan 1 baris program menjadi beberapa baris, titik dua digunakan untuk menjadikan beberapa baris program menjadi 1 baris saja. Artinya, dlm satu baris penulisan akan terdapat beberapa baris program.

Statement Akhir Procedure


Sebuah prosedur VBA selalu diakhiri atau ditutup dengan keyword "END" yg diikuti dengan jenis prosedure. Contoh:"End Sub" atau "End Function".

End JenisProsedur

Latihan VBA Excel


Untuk lebih memahami panduan VBA pada halaman ini, slahkan ikuti latihan-latihan brkut.

Latihan 1


Sebisa mungkin lakukan penulisan setiap kode secara manual (Jangan Copy Paste) agar sekaligus melatih kepekaan anda pada kode-kode VBA.
  1. Buat sebuah file excel baru dengan ekstensi .xlsm & beri nama file "-Latihan VBA 2". Simpan file ini pada folder yg sdh kita siapkan pada panduan VBA sebelumnya.
  2. Pada modul ThisWorkbbok buatlah sebuah prosedur brkut:
    Private Sub Workbook_SheetActivate(ByVal Sh As Object) 'Ini contoh Event procedure pada modul ThisWorkbook     MsgBox "Sheet tertentu pada file ini se&g aktif" End Sub
  3. Jika sdh, cobalah untuk berpindah antar sheet pada workbook anda. Apa yg terjadi?

    Saat anda mengaktifkan Sheet1, sheet2 atau sheet3 maka akan muncul sebuah kotak pesan (Message Box) yg berisi teks: "Sheet tertentu pada file ini se&g aktif". Event Prosedur pada thisWorkbook tadi berjalan ketika anda mengaktifkan sheet manapun pada file.
  4. Selanjutnya Pada modul Sheet1 buatlah sebuah prosedur brkut:
    Private Sub Worksheet_Activate() 'Ini contoh Event procedure pada modul sheet     MsgBox "Sheet 1 Se&g aktif" End Sub
  5. Sekarang cobalah untuk mengaktifkan Sheet1, Sheet2 & Sheet3 pada file tersebut secara bergantian. Apa yg terjadi?

    Saat anda mengaktifkan Sheet1 selain muncul pesan dari kode pada ThisWorkbook tadi muncul pesan lain yg adalah hasil dari kode pada modul Sheet1. Se&gkan pada Sheet2 & Sheet3 tidak berlaku hal yg sama.

Dari latihan ini, anda bisa belajar bahwa event procedure pada thisWorkbook berpengaruh pada semua Sheet se&gkan event procedure pada sebuah sheet tidak berpengaruh pada Sheet lain.

Latihan 2


Masih pada file yg sama lakukan beberapa hal brkut:
  1. Tambahkan 2 standart modul baru dengan klik Insert--Module.
  2. Aktifkan Modul 1 (Double klik) kemudian tulis buatlah prosedure VBA brkut:
    Public Sub latihanMacro1() 'Ini prosedur public dengan nama "latihanMacro1"     MsgBox "Ini prosedur public pada -Modul 1- dengan nama -latihanMacro1-"     MsgBox "Belajar VBA by --" End Sub
  3. Jalankan sub prosedur tersebut.
  4. Buatlah 2 prosedur baru dibawah prosedur latihanMacro1 tadi, kode VBA-nya sbgai brkut:

    Prosedur latihanMacro2:

    Sub latihanMacro2() 'Ini prosedur dengan nama "latihanMacro2"     MsgBox _             "Ini prosedur pada -Modul 1- dengan nama -latihanMacro2-"     MsgBox "Belajar VBA by --" End Sub

    Prosedur latihanMacro3:

    Private Sub latihanMacro3() 'Ini prosedur private _   dengan nama "macroUmum3"     MsgBox "Ini prosedur private dengan nama -latihanMacro3-": MsgBox "Belajar VBA by --" End Sub
  5. Jalankan masing-masing sub prosedure tersebut secara bergantian.

Pada latihan di atas saya ingin menekankan bagaimana cara membuat sebuah prosedur sederhana pada sebuah modul dan bagaimana menggunakan tanda baca petik tunggal ('), underscore(_) & titik dua(:).

Silahkan baca ulang penjelasannya pada bagian sebelumnya.

Latihan 3


Jika sdh bisa memhami maskud dari prosedur-prosedur di atas, sekarang kita lanjutkan dengan latihan 3.

  1. Masih pada file yg sama, buka standart Modul 2, kemudian buatlah sebuah sub prosedure dengan nama latihanMacro4 dengan kode sbgai brkut:
    Sub latihanMacro4() 'Memanggil prosedur latihanMacro1     latihanMacro1 End Sub
  2. Jalankan prosedure tersebut.

    Prosedure latihanmacro4 ini bermaksud memanggil atau menjalankan prosedur latihanMacro1 dengan cara menuliskan nama prosedure yg akan dipanggil tadi. Saat latihanMacro4 dijalankan maka prosedur ini akan memanggil & menjalankan kode program yg ada di latihan Macro1.
  3. Selanjutnya kita buat 2 prosedur lain pada modul 2 dengan masing-masing kode sbgai brkut:

    Prosedur latihanMacro5:

    Sub latihanMacro5() 'Memanggil prosedur latihanMacro2     latihanMacro2 End Sub

    Prosedur latihanMacro6:

    Sub latihanMacro6() 'Memanggil prosedur latihanMacro3     latihanMacro3 End Sub
  4. Jika sdh slahkan coba jalankan kedua prosedure di atas secara bergantian. Apa yg terjadi?

    Saat latihanMacro5 dijalankan prosedur ini memanggil untuk menjalankan prosedur latihanMacro2 sehingga yg muncul adalah kotak pesan sprti yg bisa andalihat saat menjalankan prosedur latihanMacro2.

    Saat latihanMacro6 dijalankan yg terjadi adalah error "Compile error: Sub or Functions not Defined" sprti gambar dibawah ini:

     ini kita sdh belajar menulis beberapa baris kode VBA excel sederhana Panduan VBA Excel: Module & Procedure #03

    Kenapa terjadi hal demikian? Ya tebakan anda benar, sebab deklarasi pada latihanMacro3 scopenya adalah private, sehingga prosedur tersebut hanya bisa dipanggil dari modul 1 & tidak dapat dipanggil dari modul 2.

Selain mencoba sedikit memahami tentang scope private & public dari latihan ke-3 ini saya ingin menyampaikan juga pada dasarnya sub prosedur pada sebuah modul standart scopenya adalah public sehingga jika Anda tidak menuliskan keyword Public pada sebuah prosedur VBA didlm sebuah modul standart, maka akan dianggap sbgai public (lihat latihanMacro1 & latihanMacro2) & hanya dianggap private jika anda menyertakan keyword "Private" pada prosedur tersebut (latihanMacro3).

Jika anda masih bingung dengan penjelasan pada halaman ini, sangat bisa saya maklumi karena keterbatasan kemampuan saya untuk memilih kata-kata. Untuk itu jangan sungkan-sungkan untuk bertanya melalui bagian komentar yg sdh tersedia.

Untuk melengkapi pembahasan kali ini slahkan download File latihan di bawah ini :

Dropbox
GDrive

*Jika link mati / tidak dapat diakses slahkan lapor via kontak yg tersedia

LINK DOWNLOAD TERKUNCI.
Silahkan SHARE untuk membuka kunci!


Sekian dulu pembahasan kita mengenai Module & Procedure pada VBA Excel. Jika tutorial ini bermanfaat slahkan juga untuk dibagikan sehingga kawan anda lainnya juga ikut mendapatkan manfaatnya.

Terimas kasih, sampai jumpa pada seri panduan VBA Dasar brkutnya kita akan belajar tentang .


Sumber https://www.kelasexcel.id

Berlangganan update artikel terbaru via email:

Belum ada Komentar untuk "Panduan VBA Excel: Module dan Procedure #03"

Posting Komentar

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel