Aracılığıyla paylaş


Office otomasyon sunucularının GetObject ve CreateObject davranışı

Özet

Bu makalede, Microsoft Office uygulaması'nin çeşitli sürümleriyle GetObject ve CreateObject işlevlerini kullandığınızda oluşan farklı davranışlar ele alınmaktadır.

GetObject ve CreateObject, Microsoft Visual Basic ve Microsoft Visual Basic for Applications (VBA) tarafından sağlanan işlevlerdir. Bununla birlikte, GetObject başvurularını GetActiveObject API'sine çağrı olarak ve CreateObject'e başvurularını CoCreateInstanceAPI çağrısı olarak değerlendirirseniz, bilgiler Microsoft Visual C++ için de geçerlidir.

Daha Fazla Bilgi

GetObject

GetObject, otomasyon sunucusunun çalışan bir örneğine eklemek için kullanılır. GetObject'i çağırmanın birkaç farklı yolu vardır, ancak Microsoft Office uygulaması lications için önerilen söz dizimi aşağıdaki gibidir:

set xlApp = GetObject(, "Excel.Application")

Bu kod yürütürken bir Microsoft Excel örneği çalışıyorsa, xlApp değişkeni aracılığıyla çalışan örneğin nesne modeline erişebilirsiniz. Hiçbir örnek çalışmıyorsa aşağıdaki yakalanabilir çalışma zamanı hata iletisini alırsınız:

Run-time error '429':
ActiveX component can't create object  

Microsoft Excel'in birden çok örneği çalışıyorsa, GetObject ilk olarak başlatılan örneğe eklenir. Daha sonra ilk örneği kapatırsanız, GetObject'e yönelik başka bir çağrı, başlatılan ikinci örneğe eklenir ve bu şekilde devam eder.

Bu örnekteki açık bir belgenin adını biliyorsanız, belirli bir örneğe ekleyebilirsiniz. Örneğin, Bir Excel örneği Book2 adlı açık bir çalışma kitabıyla çalışıyorsa, başlatılan en eski örnek olmasa bile aşağıdaki kod bu örneğe başarıyla eklenir:

Set xlApp = GetObject("Book2").Application

CreateObject

CreateObject, Otomasyon sunucusunun yeni bir örneğini başlatmak için kullanılır. Örneğin:

set xlApp = CreateObject("Excel.Application")

Sunucunun SingleUse veya MultiUse olarak tasarlanıp tasarlanmadığına bağlı olarak, başka bir sunucu işlemi başlatılabilir veya başlatılamayabilir. Bu, otomasyon örneğini zorla kapatmanız gerekip gerekmediğine karar vermek için önemli bir ayrım olabilir. Örneğin MultiUse sunucusuyla, bir örnek eklemeden önce zaten çalışıyorsa, otomatikleştirmeyi bitirdiğinizde sunucuyu program aracılığıyla kapatmaktan kaçınmak isteyebilirsiniz.

Aşağıdaki tablo, Microsoft Office ile bir çözüm uygularken yararlı bir başvuru görevi görür. Microsoft Office'in çeşitli sürümlerinin ve uygulamalarının davranışlarını ve özniteliklerini listeler. Örneğin, sunucunun başlatıldığında varsayılan olarak görünür olup olmadığı, SingleUse veya MultiUse olması, UserControl özelliğine sahip olması, Quit yöntemine sahip olması ve ana penceresinin sınıf adı gibi.

Uygulamalar Görünür Örnek Oluşturma UserControl Var QuitClassName var Sınıf adı
Excel 97, 2000, 2002, 2003, 2007 Hayır Tek Kullan Yes Yes XlMain
Word 97, 2000, 2002, 2003, 2007 Hayır Tek Kullan Yes Yes OpusApp
PowerPoint 97 Hayır Çoklu Kullan Hayır Evet PP97FrameClass
PowerPoint 2000 Hayır Çoklu Kullan Hayır Evet PP9FrameClass
PowerPoint 2002 Hayır Çoklu Kullan Hayır Evet PP10FrameClass
PowerPoint 2003 Hayır Çoklu Kullan Hayır Evet PP11FrameClass
PowerPoint 2007 Hayır Çoklu Kullan Hayır Evet PP12FrameClass
Access 97 Yes Tek Kullan Yes Yes OMain
Access 2000, 2002, 2003, 2007 Hayır Tek Kullan Yes Yes OMain
Project 98, 2000 Hayır Çoklu Kullan Yes Yes JWinproj-WhimperMainClass

Ana pencere sınıfı adı, herhangi bir örneğin zaten çalışıp çalışmadığını rahatça öğrenmek istediğinizde FindWindow API'sini çağırmak için yararlıdır. UserControl özelliği, sunucu uygulamasının son başvurusu serbest bırakıldığında otomatik olarak kapanıp kapanmadığını (hiçbir şey olarak ayarlanmadı) belirten bir boole özelliğidir. Quit yöntemi, gerekli olduğu durumlarda UserControl özelliğini geçersiz kılmanıza olanak tanır (örneğin, son başvuru yayımlandıktan sonra bir örnek kapatılmadığında).

Genel olarak Microsoft, kullanıcının kullandığı örneğe eklemek yerine yeni bir Office uygulaması lication örneği kullanmanızı önerir. En iyisi Application ProgID kullanarak bir örnek oluşturmak ve ardından buradan yeni nesneler açmak veya oluşturmaktır. Excel.Sheet ve Word.Document gibi diğer ProgID'ler OLE'de (Nesne bağlama ve Ekleme) kullanılmak üzere tasarlanmıştır ve CreateObject ile kullanıldığında tutarsız sonuçlar verebilir. Application ProgID kullanarak, sunucuyu Otomasyon için açıkça başlatarak (Ekleme değil) olası sorunlardan kaçınmış olursunuz.

Otomasyon sunucusuyla işiniz bittiğinde, sunucuya tüm başvurularınızı bırakın ve sunucunun beklendiği gibi kapanması için Quit yöntemini (varsa) çağırın. Otomasyon aracılığıyla bir örneği yapılandırmak ve ardından kullanıcının kullanması için açık bırakmak istiyorsanız, UserControl özelliğini TRUE olarak ayarlamanız ve sonra tüm başvurularınızı serbest bırakmanız gerekir. Ardından sunucu çalışır durumda kalır (UserControl özelliği TRUE olduğundan) ve kullanıcı uygulamayı kapattığında (bekleyen başvuru olmadığından) uygun şekilde kapanır.

Not Word için UserControl özelliği salt okunurdur. Doğru veya Yanlış olarak ayarlanamaz. Son başvuru yayımlandığında Word her zaman çalışır durumda kalır.