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

Özet

Bu makalede, Microsoft Office uygulamalarının çeşitli sürümleriyle GetObject ve CreateObject işlevlerini kullandığınızda oluşan farklı davranışlar açıklanı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 başvurularını CoCreateInstanceAPI çağrısı olarak değerlendirirseniz, bilgiler Microsoft Visual C++ için de geçerlidir.

Ek 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 uygulamaları 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 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 sunucunun program aracılığıyla kapatılmasını önlemek 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ği varsa, bir Quit yöntemi varsa ve ana penceresi için sınıf adı.

Uygulamalar Görünür Instancing UserControl Var QuitClassName Var Sınıf adı
Excel 97, 2000, 2002, 2003, 2007 Hayır Tek Kullan Evet Evet XlMain
Word 97, 2000, 2002, 2003, 2007 Hayır Tek Kullan Evet Evet 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 Evet Tek Kullan Evet Evet OMain
Access 2000, 2002, 2003, 2007 Hayır Tek Kullan Evet Evet OMain
Proje 98, 2000 Hayır Çoklu Kullan Evet Evet JWinproj-WhimperMainClass

Ana pencere sınıfı adı, herhangi bir örneğin zaten çalışıyor olup olmadığı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 kapatılıp kapatılmayacağını belirten bir boole özelliğidir (hiçbir şey olarak ayarlanmadı). 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 kapanmaz).

Genel olarak Microsoft, kullanıcının kullandığı bir örneğe eklemek yerine office uygulamasının yeni bir örneğini 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 gibi diğer ProgID'ler. Belge vb. OLE'de (Nesne bağlama ve Ekleme) kullanılmak üzere tasarlanmıştır ve CreateObject ile kullanıldığında tutarsız sonuçlar verebilir. Uygulama ProgID'sini kullanarak, sunucuyu Otomasyon için (Ekleme değil) için açıkça başlatarak 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 ardından tüm başvurularınızı serbest bırakmanız gerekir. Sunucu daha sonra çalışmaya devam eder (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. Word son başvuru yayımlandığında her zaman çalışır durumda kalır.