VBA GetObject - Bagaimana cara menggunakan Fungsi GetObject di Excel VBA?

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 ke variabel objek. Untuk menggunakan teknologi OLE (Object Linking and Embedding) atau COM (Compound Object Module) untuk mengontrol 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, maka 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. Tipe objek: Kami menentukan tipe kelas objek yang akan dibuat.

Contoh Fungsi Excel VBA GETOBJECT

Misalkan kita memiliki dokumen word 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 dasar dengan tombol pintas (Alt + F11) atau menggunakan perintah 'Visual Basic' di grup 'Kode' di tab 'Pengembang' di excel.
  • Klik dua kali '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 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 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, dan kita dapat memeriksa properti dari mengajukan.

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 di 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 tersebut, dan jika ada yang menonjol di dokumen tersebut, maka kita akan menampilkan kotak pesan kepada pengguna bahwa “Tidak ada Tabel yang ditemukan di dokumen Word”.
  • Untuk mengakses tabel di dokumen dan untuk 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 tersebut.
  • 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.

Now, whenever we open the excel file, the fill is updated with table content from the word document.

Code:

Private Sub Workbook_Open() Rem Declaring Object variables to access object created by GETOBJECT Dim WdApp As Object, wddoc As Object Rem Declaring a string variable to access the Word document Dim strDocName As String Rem Error handling On Error Resume Next Rem Activating MS Word if it is already opened Set WdApp = GetObject(, "Word.Application") If Err.Number = 429 Then Err.Clear Rem Creating a Word application object if MS Word is not already opened Set WdApp = CreateObject("Word.Application") End If WdApp.Visible = True strDocName = "C:UsersCBA7_01DesktopMarks Details.docx" Rem Checking relevant directory for the relevant document Rem If not found then informing the user and closing the program If Dir(strDocName) = "" Then MsgBox "The file " & strDocName & vbCrLf & "was not found in the folder path" & vbCrLf & "C:UsersCBA7_01.", _vbExclamation, "Sorry, that document name does not exist." Exit Sub End If WdApp.Activate Set wddoc = WdApp.Documents(strDocName) If wddoc Is Nothing Then Set wddoc = WdApp.Documents.Open("C:UsersCBA7_01DesktopMarks Details.docx") wddoc.Activate Rem Defining variables to access the tables in the word document 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 "No Tables found in the Word document", vbExclamation, "No Tables to Import" Exit Sub End If Rem Starting the looping process to access tables and their rows, columns For i = 1 To Tble With.Tables(i) For rowWd = 1 To .Rows.Count For colWd = 1 To .Columns.Count Cells(x, y) = WorksheetFunction.Clean(.cell(rowWd, colWd).Range.Text) Rem Accessing next column y = y + 1 Next colWd Rem Going to next row and start from column 1 y = 1 x = x + 1 Next rowWd End With Next End With Rem we do not need to save the word document wddoc.Close Savechanges:=False Rem we quit MS Word application WdApp.Quit Rem We finally release system memory allocated for the 2 object variables Set wddoc = Nothing Set WdApp = Nothing End 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 dengan panjang 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 ini, 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 .

Artikel yang menarik...