Symptomen
Tijdens het uitvoeren van code die gebruikmaakt van Automation om Microsoft Excel te beheren, kan een van de volgende fouten optreden:
In Microsoft Excel 97 en in latere versies van Excel ontvangt u een van de volgende foutberichten:Foutbericht 1
Runtimefout '1004':
Methode '<naam van methode>' van object '_Global' is misluktFoutbericht 2
Door toepassing gedefinieerde of object-gedefinieerde fout
In Microsoft Excel 95 ontvangt u een van de volgende foutberichten:
Foutbericht 1
Runtimefout '-2147023174'
OLE Automation-foutFoutbericht 2
Runtimefout '462':
De externe servercomputer bestaat niet of is niet beschikbaar.Oorzaak
Visual Basic heeft een verwijzing naar Excel gemaakt vanwege een regel code die een Excel-object, -methode of -eigenschap aanroept zonder het element te kwalificeren met een Excel-objectvariabele. Visual Basic geeft deze verwijzing pas vrij totdat u het programma hebt beëindigd. Deze foutieve verwijzing verstoort automatiseringscode wanneer de code meer dan één keer wordt uitgevoerd.
Oplossing
U kunt dit probleem oplossen door de code aan te passen, zodat elke aanroep van een Excel-object, -methode of -eigenschap wordt gekwalificeerd met de juiste objectvariabele.
Status
Dit gedrag is inherent aan het ontwerp van het product.
Meer informatie
Als u Microsoft Excel wilt automatiseren, stelt u een objectvariabele in die meestal verwijst naar het Excel-toepassingsobject of het Excel-werkmapobject. Andere objectvariabelen kunnen vervolgens worden ingesteld om te verwijzen naar een werkblad, een bereik of andere objecten in het Microsoft Excel-objectmodel. Wanneer u code schrijft voor het gebruik van een Excel-object, -methode of -eigenschap, moet u de aanroep altijd voorafgaan door de juiste objectvariabele. Als u dat niet doet, maakt Visual Basic een eigen verwijzing naar Excel. Deze verwijzing kan problemen veroorzaken wanneer u de automation-code meerdere keren probeert uit te voeren. Zelfs als de coderegel begint met de objectvariabele, kan er een aanroep worden gedaan naar een Excel-object, -methode of -eigenschap in het midden van de regel code die niet wordt voorafgegaan door een objectvariabele.
In de volgende stappen ziet u hoe u dit probleem reproduceert en hoe u het probleem kunt oplossen.Stappen om het gedrag te reproduceren
-
Start een nieuw Standard EXE-project in Visual Basic. Form1 wordt standaard gemaakt.
-
Klik in het menu Project op Verwijzingen en controleer vervolgens de objectbibliotheek op de versie van Excel die u wilt automatiseren.
-
Plaats een besturingselement CommandButton op Form1.
-
Kopieer het volgende codevoorbeeld naar het codevenster van Form1.
Option Explicit Private Sub Command1_Click() Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets("Sheet1") xlSheet.Range(Cells(1, 1), Cells(10, 2)).Value = "Hello" xlBook.Saved = True Set xlSheet = Nothing Set xlBook = Nothing xlApp.Quit Set xlApp = Nothing End Sub
-
Klik in het menu Uitvoeren op Start of druk op F5 om het programma te starten.
-
Klik op het besturingselement CommandButton . Er treedt geen fout op. Er is echter een verwijzing naar Excel gemaakt en niet vrijgegeven.
-
Klik nogmaals op het besturingselement CommandButton . U ziet dat u een van de foutberichten ontvangt die worden besproken in de sectie Symptomen.
Opmerking Het foutbericht treedt op omdat de code verwijst naar de methode van de cel zonder de aanroep te voorafgaan met de xlSheet-objectvariabele. -
Stop het project en wijzig de volgende coderegel:
xlSheet.Range(Cells(1,1),Cells(10,2)).Value = "Hello"
Wijzig de coderegel zodat deze lijkt op de volgende coderegel.
xlSheet.Range(xlSheet.Cells(1,1),xlSheet.Cells(10,2)).Value = "Hello"
-
Voer het programma opnieuw uit. U ziet dat u de code meerdere keren kunt uitvoeren zonder een foutbericht te ontvangen.
Verwijzingen
189618 Mogelijk ontvangt u het foutbericht 'Run-time error '-2147023174' (800706ba)' of 'Runtime-fout '462' wanneer u Visual Basic-code uitvoert die gebruikmaakt van Automation om Word