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

Fungsi Excel VBA GETOBJECT

Kita dapat menggunakan fungsi GetObject di VBA dalam MS Excel untuk mengakses objek ActiveX dari file excel dan kemudian menetapkan objek ke pemboleh ubah objek. Untuk menggunakan teknologi OLE (Object Linking and Embedding) atau COM (Compound Object Module) untuk mengendalikan setiap 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 rujukan ke objek.

Sintaks untuk Fungsi GETOBJECT

Fungsi GET OBJECT mempunyai argumen bernama:

  1. Pathname: Kita perlu menentukan jalan penuh dan nama fail yang mengandungi objek untuk diambil. Ini adalah argumen pilihan, sebenarnya, kedua-dua argumen dalam fungsi GetObject adalah pilihan, tetapi jika 'pathname' dihilangkan, argumen kedua 'class' diperlukan.
  2. Kelas : Ini juga argumen pilihan seperti yang dinyatakan sebelumnya. Ini menerima rentetan yang mewakili kelas objek.

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

  1. Appname: Kita perlu menentukan nama aplikasi, yang akan memberikan objek.
  2. Jenis objek: Kami menentukan jenis kelas objek yang akan dibuat.

Contoh Fungsi Excel VBA GETOBJECT

Andaikan kita mempunyai dokumen perkataan yang mengandungi 3 jadual.

Kami ingin menulis kod VBA yang akan mengimport semua jadual dalam dokumen ke lembaran excel. Untuk melakukan perkara yang sama, kita perlu menggunakan fungsi CreateObject dan GetObject di VBA.

Langkahnya adalah:

  • Buat fail excel dan simpan fail dengan pelanjutan excel .xlsm (Buku Kerja Excel Macro-Enabled) kerana kita perlu menjalankan kod VBA (makro).
  • Buka editor visual asas dengan kekunci pintasan (Alt + F11) atau gunakan arahan 'Visual Basic' dalam kumpulan 'Code' di tab 'Developer' di excel.
  • Klik dua kali pada 'ThisWorkbook' di sebelah kiri editor VBA dan pilih 'Workbook' dari senarai yang ditunjukkan selepas itu di bahagian atas skrin.
  • Pilih 'Buka' dari senarai.
  • Sekarang kita perlu menulis kod di antara dua baris ini.
  • Pertama, kita akan menyatakan pemboleh ubah untuk menahan objek (Dokumen MS Word dan objek Aplikasi MS Word) dan 'Pembolehubah String' untuk menyimpan nama dokumen dari mana kita perlu mengekstrak jadual.
  • Untuk pengendalian ralat, kami akan menambahkan satu pernyataan. Pernyataan ini memberitahu program VBA untuk mengabaikan kesalahan dan menyambung semula pelaksanaan dengan baris kod seterusnya. Pernyataan "On Error Resume Next" tidak memperbaiki kesilapan masa berjalan, tetapi ini bermaksud bahawa pelaksanaan program akan berlanjutan dari baris yang mengikuti garis yang menyebabkan kesalahan.
  • Sekarang kita akan menggunakan fungsi GetObject untuk mendapatkan akses ke contoh semasa dari Objek Aplikasi Word.
  • Sekiranya sekiranya tidak ada contoh semasa Aplikasi MS Word, atau komponen ActiveX tidak dapat membuat objek atau mengembalikan rujukan ke objek ini, maka ralat 429. Untuk ini, kami akan menambahkan dua baris di bawah kod ini. Setelah menangani ralat, kita perlu membuat contoh objek Aplikasi MS Word menggunakan fungsi CreateObject .
  • Untuk menjadikan Aplikasi MS Word kelihatan, kita akan mengubah harta benda objek 'WdApp' yang kelihatan menjadi BENAR .
  • Kita perlu mencari lokasi dan nama file dari dokumen kata dari mana kita ingin mengimport jadual ke dalam lembaran excel dan memberikan yang sama ke "strDocName" Untuk mencari nama dan lokasi, dan kita dapat memeriksa sifat - sifat fail.

Untuk membuka kotak dialog 'Properties' , pilih saja fail tersebut dan tekan 'Alt + Enter.'

  • Sekiranya fail tidak ada di lokasi yang ditentukan, maka kod tersebut mengembalikan pesan yang menyatakan, "Fail Tanda Butiran tidak dijumpai di jalur folder." Judulnya adalah "Maaf, nama dokumen itu tidak ada."
  • Sekarang kita perlu mengaktifkan Aplikasi MS Word dan menetapkan pemboleh ubah 'wddoc' dengan dokumen kata yang mempunyai nama fail yang tersimpan di 'strDocName.'
  • Sekiranya fail belum dibuka, maka kita perlu membuka dokumen dan mengaktifkan aplikasinya.
  • Setelah mengaktifkan dokumen perkataan, kita perlu mengakses jadual dalam dokumen. Untuk melakukan perkara yang sama, kami akan membuat beberapa pemboleh ubah.

Tble adalah pembolehubah integer, yang akan menyimpan jumlah jadual dalam dokumen.

rowWd adalah pemboleh ubah panjang, yang akan menyimpan bilangan baris dalam jadual tertentu.

colWd adalah pemboleh ubah panjang, yang akan menyimpan bilangan lajur dalam jadual tertentu.

  • Kita perlu menghitung jumlah tabel dalam dokumen, dan jika ada yang penting dalam dokumen tersebut, maka kita akan memaparkan kotak pesan kepada pengguna bahwa "Tidak ada Tabel yang ditemukan dalam dokumen Word."
  • Untuk mengakses jadual dalam dokumen dan menulis kandungan dalam helaian excel, kami akan menjalankan gelung VBA 'Untuk' beberapa kali, dan dalam gelung VBA ini, kami akan menjalankan gelung bersarang 'untuk' untuk mengakses setiap baris dan setiap lajur berturut-turut.
  • Oleh kerana kami tidak mahu menyimpan dokumen dan keluar dari aplikasi. Kita juga harus melepaskan memori sistem. Untuk melakukan perkara yang sama, kami akan menulis kod 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

Perkara yang Perlu Diingat

  1. Ada beberapa objek tunggal, yang hanya satu contoh objek dihasilkan, tanpa menghiraukan jumlah yang mana CreateObject dijalankan. Fungsi GetObject setiap saat mengembalikan contoh yang sama ketika dipanggil dengan rentetan sifar panjang, dan ralat muncul jika argumen 'pathname' tidak disebut.
  2. Kami tidak dapat menggunakan GetObject untuk mengakses rujukan ke kelas yang dibuat dengan VBA.
  3. Jika demikian, tidak ada contoh aktif Aplikasi MS Word, atau kami tidak ingin objek yang dimulakan dengan file sudah dimuat, maka pertama-tama kami menggunakan fungsi CreateObject untuk membuat objek dan kemudian menggunakan fungsi GetObject untuk mengakses objek .

Artikel menarik...