VBA GetObject - Excel VBA'da GetObject İşlevi nasıl kullanılır?

Excel VBA GETOBJECT İşlevi

Excel dosyasından bir ActiveX nesnesine erişmek ve ardından nesneyi bir nesne değişkenine atamak için MS Excel'deki VBA'daki GetObject işlevini kullanabiliriz. MS Word, MS Outlook, MS PowerPoint ve Internet Explorer gibi herhangi bir Microsoft uygulamasını kontrol etmek için OLE (Nesne Bağlama ve Gömme) veya COM (Bileşik Nesne Modülü) teknolojisini kullanmak için VBA GETOBJECT işlevini kullanabiliriz.

Nesneyi oluşturmak için CreateObject işlevini kullanırız ve GETOBJECT işlevi nesneye referansı döndürür.

GETOBJECT İşlevi için Sözdizimi

GET NESNE İşlevi şu adlandırılmış bağımsız değişkenlere sahiptir:

  1. Pathname: Geri alınacak nesneyi içeren dosyanın tam yolunu ve adını belirtmemiz gerekiyor. Bu isteğe bağlı bir bağımsız değişkendir, aslında GetObject işlevindeki her iki bağımsız değişken de isteğe bağlıdır, ancak 'yol adı' atlanırsa, ikinci bağımsız değişken 'sınıf' gereklidir.
  2. Sınıf : Bu aynı zamanda daha önce de belirtildiği gibi isteğe bağlı bir argümandır. Bu, nesnenin sınıfını temsil eden bir dizeyi kabul eder.

'Sınıf' bağımsız değişkenini belirtmek için 'appname.objecttype' sözdizimini kullanıyoruz.

  1. Appname: Biz nesneyi sağlayacak uygulamanın adını belirtmek gerekir.
  2. Nesne türü: Oluşturulacak nesne sınıfının türünü belirleriz.

Excel VBA GETOBJECT İşlevi Örneği

3 tablo içeren bir word belgemiz olduğunu varsayalım.

Belgedeki tüm tabloları excel sayfasına aktaracak bir VBA kodu yazmak istiyoruz. Aynısını yapmak için, VBA'da CreateObject ve GetObject işlevini kullanmamız gerekecek.

Adımlar şöyle olacaktır:

  • Bir excel dosyası oluşturun ve dosyayı .xlsm excel uzantısıyla (Excel Makro Etkin Çalışma Kitabı) kaydedin, çünkü VBA kodunu (makro) çalıştırmamız gerekecek.
  • Bir kısayol tuşuyla (Alt + F11) veya excel'deki 'Geliştirici' sekmesinde bulunan 'Kod' grubundaki 'Visual Basic' komutunu kullanarak temel görsel düzenleyiciyi açın.
  • VBA editörünün sol tarafındaki 'ThisWorkbook' üzerine çift tıklayın ve daha sonra ekranın üstünde gösterilen listeden 'Çalışma Kitabı'nı seçin.
  • Listeden 'Aç'ı seçin.
  • Şimdi kodu bu iki satır arasına yazmamız gerekiyor.
  • İlk olarak, nesneleri tutacak değişkenleri (MS Word Belgesi ve MS Word Uygulama nesnesi) ve belgenin adını tabloları çıkarmamız gereken yerden tutmak için bir 'Dize Değişkeni' tanımlayacağız.
  • Hata işleme için bir ifade ekleyeceğiz. Bu ifade, VBA programına hatayı görmezden gelmesini ve sonraki kod satırıyla yürütmeye devam etmesini söyler. "On Error Resume Next" ifadesi, çalışma zamanı hatalarını düzeltmez, ancak bu, program yürütmenin hataya neden olan satırı takip eden satırdan devam edeceği anlamına gelir.
  • Şimdi , Word Uygulama Nesnesinin mevcut örneğine erişmek için GetObject işlevini kullanacağız .
  • MS Word Uygulamasının geçerli bir örneği yoksa veya ActiveX bileşeni bir nesne oluşturamazsa veya bu nesneye referans döndüremezse, 429 hatası. Bunun için kodda iki satırın altına ekleyeceğiz. Hatayı ele aldıktan sonra, CreateObject işlevini kullanarak MS Word Application nesnesinin bir örneğini oluşturmamız gerekir .
  • MS Word Uygulamasını görünür kılmak için, 'WdApp' nesnesinin görünür özelliğini TRUE olarak değiştireceğiz .
  • Tabloları bir excel sayfasına aktarmak istediğimiz word belgesinin konumunu ve dosya adını bulmalı ve aynısını "strDocName" e atamalıyız.Adı ve konumu bulmak için ve özelliklerini kontrol edebiliriz . dosya.

'Özellikler' iletişim kutusunu açmak için dosyayı seçip 'Alt + Enter' tuşlarına basmanız yeterlidir.

  • Dosya belirtilen konumda yoksa kod, "Dosya İşaretleri Ayrıntıları klasör yolunda bulunamadı" mesajını verir. Başlık "Üzgünüz, bu belge adı mevcut değil" olacaktır.
  • Şimdi MS Word Uygulamasını etkinleştirmemiz ve 'wddoc' değişkenini 'strDocName'de kayıtlı dosya adına sahip olan word belgesiyle atamamız gerekiyor.
  • Dosya zaten açılmadıysa, belgeyi açmamız ve uygulamayı etkinleştirmemiz gerekir.
  • Word belgesini etkinleştirdikten sonra, belgedeki tablolara erişmemiz gerekiyor. Aynısını yapmak için bazı değişkenler oluşturacağız.

Tble , belgedeki tabloların sayısını saklayacak tamsayı değişkendir.

rowWd , belirli bir tablodaki satır sayısını depolayacak uzun değişkendir.

colWd , belirli bir tablodaki sütun sayısını depolayacak uzun değişkendir.

  • Belgedeki tabloların sayısını saymamız gerekir ve belgede dikkate değer bir tablo varsa, kullanıcıya "Word belgesinde Tablo bulunamadı" şeklinde bir mesaj kutusu göstereceğiz .
  • Belgedeki tablolara erişmek ve içeriği excel sayfasına yazmak için, birkaç kez bir 'For' VBA döngüsü çalıştıracağız ve bu VBA döngüsü içinde, her satıra erişmek için iç içe geçmiş 'for' döngüleri çalıştıracağız. ve satırdaki her sütun.
  • Belgeyi kaydetmek ve uygulamadan çıkmak istemediğimiz için. Ayrıca sistemin hafızasını da serbest bırakmalıyız. Aynısını yapmak için aşağıdaki kodu yazacağız.

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

Hatırlanacak şeyler

  1. CreateObject öğesinin çalıştırıldığı sayıdan bağımsız olarak, nesnenin yalnızca bir örneğinin oluşturulduğu bazı tek örnekli nesneler vardır. GetObject işlevi, sıfır uzunlukta bir dizeyle çağrıldığında her zaman aynı örneği döndürür ve 'yol adı' bağımsız değişkeninden bahsedilmezse bir hata oluşur.
  2. VBA ile oluşturulmuş bir sınıfa başvuruya erişmek için GetObject'i kullanamayız.
  3. Durumda, MS Word Uygulamasının etkin bir örneği yoksa veya nesnenin önceden yüklenmiş bir dosyayla başlatılmasını istemiyorsak, önce nesneyi oluşturmak için CreateObject işlevini ve ardından nesneye erişmek için GetObject işlevini kullanıyoruz. .

Ilginç makaleler...