VBA GetObject

Fungsi Excel VBA GETOBJECT

Kita dapat menggunakan fungsi GetObject di VBA di MS Excel untuk mengakses objek ActiveX dari file excel dan kemudian menetapkan objek tersebut ke variabel objek. Untuk menggunakan teknologi OLE (Object Linking and Embedding) atau COM (Compound Object Module) untuk mengontrol semua aplikasi Microsoft seperti MS Word, MS Outlook, MS PowerPoint, dan Internet Explorer, dll., Kita dapat menggunakan fungsi VBA GETOBJECT.

Kami menggunakan fungsi CreateObject untuk membuat objek dan fungsi GETOBJECT mengembalikan referensi ke objek.

Sintaks untuk Fungsi GETOBJECT

Fungsi GET OBJECT memiliki argumen bernama ini:

  1. Pathname: Kita perlu menentukan path lengkap dan nama file yang berisi objek yang akan diambil. Ini adalah argumen opsional, pada kenyataannya, kedua argumen dalam fungsi GetObject adalah opsional tetapi jika 'pathname' dihilangkan, argumen kedua 'class' diperlukan.
  2. Kelas : Ini juga merupakan argumen opsional seperti yang ditentukan sebelumnya juga. Ini menerima string yang mewakili kelas objek.

Kami menggunakan sintaks 'appname.objecttype' untuk menentukan argumen 'class'.

  1. Appname: Kita perlu menentukan nama aplikasi, yang akan menyediakan objeknya.
  2. Objecttype: Kami menentukan tipe kelas objek yang akan dibuat.

Contoh Fungsi Excel VBA GETOBJECT

Anda dapat mengunduh Template GetObject VBA ini di sini - Template GetObject VBA

Misalkan, kami memiliki dokumen kata yang berisi 3 tabel.

Kami ingin menulis kode VBA yang akan mengimpor semua tabel di dokumen ke lembar excel. Untuk melakukan hal yang sama, kita perlu menggunakan fungsi CreateObject dan GetObject di VBA.

Langkah-langkahnya adalah:

  • Buat file excel dan simpan file dengan ekstensi .xlsm excel (Buku Kerja Excel Macro-Enabled) karena kita perlu menjalankan kode VBA (makro).
  • Buka editor visual basic dengan tombol pintas (Alt + F11) atau menggunakan perintah 'Visual Basic' di grup 'Kode' di tab 'Pengembang' di excel.
  • Klik dua kali pada 'Buku Kerja Ini' di sisi kiri editor VBA dan pilih 'Buku Kerja' dari daftar yang ditampilkan setelahnya di bagian atas layar.

  • Pilih 'Buka' dari daftar.

  • Sekarang kita perlu menulis kode di antara dua baris ini.

  • Pertama, kita akan mendeklarasikan variabel untuk menampung objek (Dokumen MS Word dan objek Aplikasi MS Word) dan 'Variabel String' untuk menyimpan nama dokumen dari mana kita perlu mengekstrak tabel.

  • Untuk penanganan kesalahan, kami akan menambahkan satu pernyataan, pernyataan ini memberi tahu program VBA untuk mengabaikan kesalahan dan melanjutkan eksekusi dengan baris kode berikutnya. Pernyataan "On Error Resume Next" tidak memperbaiki error runtime tetapi ini berarti bahwa eksekusi program akan dilanjutkan dari baris yang mengikuti baris yang menyebabkan error.

  • Sekarang kita akan menggunakan fungsi GetObject untuk mendapatkan akses ke contoh saat ini dari Objek Aplikasi Word.

  • Jika dalam kasus ini, tidak ada contoh saat ini dari Aplikasi MS Word atau komponen ActiveX tidak dapat membuat objek atau mengembalikan referensi ke objek ini maka kesalahan 429. Untuk ini, kami akan menambahkan di bawah dua baris dalam kode. Setelah menangani kesalahan, kita perlu membuat instance dari objek Aplikasi MS Word menggunakan fungsi CreateObject .

  • Untuk membuat Aplikasi MS Word terlihat, kami akan mengubah properti terlihat dari objek 'WdApp' menjadi TRUE .

  • Kita perlu menemukan lokasi dan nama file dari dokumen kata yang kita ingin impor tabelnya ke dalam lembar excel dan menetapkan yang sama ke "strDocName" Untuk menemukan nama dan lokasi, kita dapat memeriksa properti file .

Untuk membuka kotak dialog 'Properties' , cukup pilih file dan tekan 'Alt + Enter' .

  • Jika file tidak ada di lokasi yang ditentukan maka kode mengembalikan pesan yang menyatakan "File Marks Details tidak ditemukan di jalur folder". Judulnya adalah "Maaf, nama dokumen itu tidak ada".

  • Sekarang kita perlu mengaktifkan Aplikasi MS Word dan menetapkan variabel 'wddoc' dengan dokumen kata yang memiliki nama file yang disimpan di 'strDocName' .

  • Jika file belum dibuka maka kita perlu membuka dokumen dan mengaktifkan aplikasi.

  • Setelah mengaktifkan dokumen kata, kita perlu mengakses tabel di dokumen. Untuk melakukan hal yang sama, kami akan membuat beberapa variabel.

Tble adalah variabel integer, yang akan menyimpan jumlah tabel dalam dokumen.

rowWd adalah variabel panjang, yang akan menyimpan jumlah baris dalam tabel tertentu.

colWd adalah variabel panjang, yang akan menyimpan jumlah kolom dalam tabel tertentu.

  • Kita perlu menghitung jumlah tabel di dokumen dan jika tidak ada tabel di dokumen maka kita akan menampilkan kotak pesan kepada pengguna bahwa "Tidak ada Tabel yang ditemukan di dokumen Word" .

  • Untuk mengakses tabel dalam dokumen dan menulis konten di lembar excel, kita akan menjalankan loop 'Untuk' VBA untuk beberapa kali tabel dan dalam loop VBA ini, kita akan menjalankan loop 'for' untuk mengakses setiap baris dan setiap kolom di baris.

  • Karena kami tidak ingin menyimpan dokumen dan keluar dari aplikasi. Kita juga harus melepaskan memori sistem. Untuk melakukan hal yang sama, kami akan menulis kode berikut.

Sekarang setiap kali kita akan membuka file excel, isian diperbarui dengan konten tabel dari dokumen kata.

Kode:

Private Sub Workbook_Open () Rem Mendeklarasikan variabel Objek untuk mengakses objek yang dibuat oleh GETOBJECT Dim WdApp Sebagai Objek, wddoc As Object Rem Mendeklarasikan variabel string untuk mengakses dokumen Word Dim strDocName As String Rem Error handling On Error Resume Next Rem Mengaktifkan MS Word jika itu sudah dibuka Set WdApp = GetObject (, "Word.Application") Jika Err.Number = 429 Kemudian Err.Clear Rem Membuat objek aplikasi Word jika MS Word belum dibuka Set WdApp = CreateObject ("Word.Application") Akhiri Jika WdApp.Visible = True strDocName = "C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx" Rem Memeriksa direktori yang relevan untuk dokumen yang relevan Rem Jika tidak ditemukan maka beri tahu pengguna dan tutup program Jika Dir (strDocName) = " "Kemudian MsgBox" File "& strDocName & vbCrLf &"tidak ditemukan di jalur folder "& vbCrLf &" C: \ Users \ CBA7_01 \. ", _vbExclamation," Maaf, nama dokumen itu tidak ada. "Keluar dari Sub End Jika WdApp.Activate Set wddoc = WdApp.Documents (strDocName ) Jika wddoc Tidak Ada Lalu Setel wddoc = WdApp.Documents.Open ("C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx") wddoc. Aktifkan variabel Rem Defining untuk mengakses tabel dalam dokumen kata Dim Tble As Integer Dim rowWd As Long Dim colWd As Integer Dim x As Long, y As Long x = 1 y = 1 With wddoc Tble = wddoc.Tables.Count If Tble = 0 Then MsgBox "Tidak ada Tabel yang ditemukan di dokumen Word", vbExclamation, "No Tabel untuk Diimpor "Keluar Sub Akhir Jika Rem Memulai proses perulangan untuk mengakses tabel dan barisnya, kolom Untuk i = 1 Untuk Tble Dengan. Tabel (i) Untuk rowWd = 1 Ke .Rows.Count Untuk colWd = 1 Ke .Columns.Count Cells (x, y) = WorksheetFunction.Clean (.cell (rowWd, colWd) .Range.Text) Rem Mengakses kolom berikutnya y = y + 1 Kolom berikutnya Rem Pergi ke baris berikutnya dan mulai dari kolom 1 y = 1 x = x + 1 Next rowWd Akhiri Dengan Next End Dengan Rem kita tidak perlu menyimpan dokumen kata wddoc. Tutup Savechanges: = Salah Rem kita keluar dari aplikasi MS Word WdApp.Quit Rem Kita akhirnya melepaskan memori sistem yang dialokasikan untuk 2 variabel objek Set wddoc = Tidak Ada Set WdApp = Tidak Ada Akhir SubKeluar dari Rem Kami akhirnya merilis memori sistem yang dialokasikan untuk 2 variabel objek Set wddoc = Tidak Ada Set WdApp = Tidak Ada Akhir SubKeluar dari Rem Kami akhirnya merilis memori sistem yang dialokasikan untuk 2 variabel objek Set wddoc = Tidak Ada Set WdApp = Tidak Ada Akhir Sub

Hal-hal untuk diingat

  1. Ada beberapa objek instance tunggal, yang hanya menghasilkan satu instance objek, terlepas dari nomor yang menjalankan CreateObject. Fungsi GetObject setiap saat mengembalikan instance yang sama ketika dipanggil dengan string panjangnya nol dan kesalahan muncul jika argumen 'pathname' tidak disebutkan.
  2. Kami tidak dapat menggunakan GetObject untuk mengakses referensi ke kelas yang dibuat dengan VBA.
  3. Jika dalam kasus, tidak ada contoh aktif dari Aplikasi MS Word, atau kita tidak ingin objek dimulai dengan file yang sudah dimuat maka pertama-tama kita menggunakan fungsi CreateObject untuk membuat objek dan kemudian menggunakan fungsi GetObject untuk mengakses objek.