GetObject VBA

Fungsi Excel VBA GETOBJECT

Kita dapat menggunakan fungsi GetObject dalam VBA di 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 merupakan hujah 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

Anda boleh memuat turun Templat GetObject VBA ini di sini - Templat VBA GetObject

Katakan, 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 asas visual dengan kekunci pintasan (Alt + F11) atau gunakan arahan 'Visual Basic' dalam kumpulan 'Kod' di tab 'Pembangun' 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 'String Variable' 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 meneruskan pelaksanaan dengan baris kod seterusnya. Pernyataan "On Error Resume Next" tidak membetulkan ralat runtime tetapi ia 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 terkini dari Objek Aplikasi Word.

  • Sekiranya berlaku, 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, kami 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 tabel ke dalam lembar excel dan memberikan yang sama ke "strDocName" Untuk mencari nama dan lokasi, kita dapat memeriksa sifat - sifat file .

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

  • Sekiranya fail tidak ada di lokasi yang ditentukan maka kod tersebut akan mengembalikan mesej yang menyatakan "File Marks Details tidak dijumpai di folder folder". Judulnya adalah "Maaf, nama dokumen itu tidak ada."

  • Sekarang kita perlu mengaktifkan Aplikasi MS Word dan menetapkan pemboleh ubah 'wddoc' dengan dokumen perkataan 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 tidak ada tabel di dalam dokumen tersebut maka kita akan memaparkan kotak pesan kepada pengguna bahawa "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' untuk beberapa kali jadual dan dalam gelung VBA ini, kami akan menjalankan gelung bersarang 'untuk' untuk mengakses setiap baris dan setiap lajur berturut-turut.

  • As we do not want to save the document and quit the application. We should also release the memory of the system. To do the same, we will write the following code.

Now whenever we will 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:\Users\CBA7_01\Desktop\Marks 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:\Users\CBA7_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:\Users\CBA7_01\Desktop\Marks 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 

Things to Remember

  1. There is some single-instance object, for which only one instance of the object is generated, regardless of the number for which CreateObject is run. GetObject function at all times returns the same instance when it is called with a string of zero length and an error comes if the ‘pathname’ argument is not mentioned.
  2. We cannot use GetObject to access a reference to a class created with VBA.
  3. If in case, there is no active instance of the MS Word Application, or we do not want the object initiated with a file already loaded then we first use the CreateObject function to create the object and then use GetObject function to access the object.