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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin