Office-automaatiopalvelimien GetObject- ja CreateObject-käytöt

Huomautus

Office 365 ProPlus nimetään uudelleen Microsoft 365 Apps for enterprise -sovellukseksi. Lisätietoja tästä muutoksesta on tässä blogikirjoituksessa.

Yhteenveto

Tässä artikkelissa käsitellään erilaisia toimintoja, joita ilmenee käytettäessä GetObject- ja CreateObject-funktioita Microsoft Office -sovellusten eri versioissa.

GetObject ja CreateObject ovat Funktioita, jotka tarjoaa Microsoft Visual Basic ja Microsoft Visual Basic for Applications (VBA). Tiedot koskevat kuitenkin myös Microsoft Visual C++:aa, jos käsittelet viittauksia GetObject-kohteeseen kutsuina GetActiveObject-ohjelmointirajapintaan ja viittauksia CreateObject-kohteeseen kutsuina CoCreateInstanceAPI:lle.

Lisätietoja

GetObject

GetObject-tä käytetään liittämiseen automaatiopalvelimen käynnissäriitattuun esiintymään. GetObject-kutsuja voi kutsua eri tavoin, mutta Microsoft Office -sovellusten syntaksi on seuraava:

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

Jos Microsoft Excelin esiintymä suoritetaan, kun tämä koodi suoritetaan, voit käyttää suoritettavan esiintymän objektimallia xlApp-muuttujan kautta. Jos mitään esiintymää ei ole käynnissä, näyttöön tulee seuraava suorituksenaikainen suorituksen aikana suoritettava virhesanoma:

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

Jos käynnissä on useita Microsoft Excel -esiintymät, GetObject liittää sen esiintymään, joka käynnistetään ensin. Jos suljet ensimmäisen esiintymän, toinen kutsu GetObject-objektille liitetään toiseen esiintymään, joka käynnistettiin, ja niin edelleen.

Voit liittää tietyn esiintymän, jos tiedät avoimen tiedoston nimen tässä esiintymässä. Jos esimerkiksi Excelin esiintymä on käynnissä avoimessa työkirjassa nimeltä Kirja2, seuraava koodi liitetään onnistuneesti tähän esiintymään, vaikka se ei olisi ensimmäinen esiintymä, joka käynnistettiin:

Set xlApp = GetObject("Book2").Application

CreateObject

CreateObject-tä käytetään automaatiopalvelimen uuden esiintymän luomiseen. Esimerkiksi:

set xlApp = CreateObject("Excel.Application")

Sen mukaan, onko palvelin suunniteltu SingleUse- vai MultiUse-palvelimeksi, voidaan käynnistää toinen palvelinprosessi tai sitä ei ehkä käynnistetä. Tämä voi olla tärkeä ero sen päättäminen, kannattaako automaatioesiintymä sulkea. Jos käytössäsi on esimerkiksi Monikäyttö-palvelin ja esiintymä on jo käynnissä ennen liittämistä, sinun kannattaa ehkä välttää palvelimen ohjelmallinen sulkeminen, kun automaattinen käyttö on valmis.

Seuraava taulukko on hyödyllinen viite, kun ratkaisua käytetään Microsoft Officen kanssa. Siinä luetellaan Microsoft Officen eri versioiden ja sovellusten toiminta ja määritteet, kuten se, onko palvelin oletusarvoisesti näkyvissä, kun se käynnistetään, jos se on Yksittäinen käyttö vai Monikäyttö, jos sillä on KäyttäjänOhjaus-ominaisuus, jos siinä on Quit-menetelmä, ja luokan nimi pääikkunassa.

Sovellus(t) Näkyvissä Instancing Käyttäjäohjausobjekti Has QuitClassName Luokan nimi
Excel 97, 2000, 2002, 2003, 2007 Ei SingleUse Kyllä Kyllä XlMain
Word 97, 2000, 2002, 2003, 2007 Ei SingleUse Kyllä Kyllä OpusApp
PowerPoint 97 Ei Monikäyttö Ei Kyllä PP97FrameClass
PowerPoint 2000 Ei Monikäyttö Ei Kyllä PP9FrameClass
PowerPoint 2002 Ei Monikäyttö Ei Kyllä PP10FrameClass
PowerPoint 2003 Ei Monikäyttö Ei Kyllä PP11FrameClass
PowerPoint 2007 Ei Monikäyttö Ei Kyllä PP12FrameClass
Access 97 Kyllä SingleUse Kyllä Kyllä OMain
Access 2000, 2002, 2003, 2007 Ei SingleUse Kyllä Kyllä OMain
Project 98, 2000 Ei Monikäyttö Kyllä Kyllä JWinproj-WhimperMainClass

Pääikkunan luokan nimi on hyödyllinen, kun kutsut EtsiWindow-ohjelmointirajapintaa, kun haluat selvittää kätevästi, onko jokin esiintymä jo käynnissä. KäyttäjänOhjausobjekti-ominaisuus on totuusarvo-ominaisuus, joka ilmaisee, sammuuko palvelinsovellus automaattisesti, kun viimeinen viittaus vapautetaan (asetus ei ole mitään). Quit-menetelmän avulla voit ohittaa KäyttäjänOhjaus-ominaisuuden tapauksissa, joissa se on tarpeen (esimerkiksi silloin, kun esiintymä ei sammu viimeisen viittauksen jälkeen).

Microsoft suosittelee yleensä, että käytät Office-sovelluksen uutta esiintymää sen sijaan, että liität sen esiintymään, jota käyttäjä saattaa käyttää. Se on paras luoda esiintymä Application ProgID -ohjelmalla ja avata tai luoda sitten uusia objekteja siitä. Muut progIDs-tunnukset, kuten Excel.Sheet ja Word.Document, on tarkoitettu käytettäväksi OLE:ssa (Objektien linkitys ja upottaminen) ja voivat aiheuttaa ristiriitaisia tuloksia, kun niitä käytetään CreateObject-objektin kanssa. Käyttämällä Application ProgID -tunnusta voit välttää mahdolliset ongelmat käynnistämällä automaatiopalvelimen (ei upottamista) eksplisiittisesti.

Kun automaatiopalvelin on valmis, vapauta kaikki siihen liittyvät viittaukset ja kutsu sen Quit-menetelmä (jos käytettävissä) niin, että palvelin sulkeutuu odotetulla tavalla. Jos haluat määrittää esiintymän automaation kautta ja jättää sen sitten auki käyttäjälle käytettäväksi, sinun on määritettävä UserControl-ominaisuuden arvoksi TOSI ja vapauttamaan sitten kaikki viittaukset. Palvelin pysyy sitten käynnissä (koska KäyttäjänOhjaus-ominaisuus on TOSI) ja sulkeutuu asianmukaisesti, kun käyttäjä sulkee sovelluksen (koska avoimet viittaukset eivät ole).

Huomautus Wordissa KäyttäjänOhjaus-ominaisuus on vain luku -ominaisuudessa. Arvoksi ei voi määrittää Tosi tai Epätosi. Word pysyy aina käynnissä, kun viimeinen viittaus julkaistaan.