Symptom
När du kör kod som använder Automation för att styra Microsoft Excel kan något av följande fel uppstå: I Microsoft Excel 97 och senare versioner av Excel får du ett av följande felmeddelande:
Felmeddelande 1
Körningsfel 1004: Metod "<namn på metod>" för objektet "_Global" misslyckades
Felmeddelande 2
Programdefinierat eller objektdefinierat fel
I Microsoft Excel 95 får du något av följande felmeddelanden:
Felmeddelande 1
Körningsfel 2147023174 OLE Automation-fel
Felmeddelande 2
Körningsfel 462: Fjärrserverdatorn finns inte eller är inte tillgänglig.
Orsak
Visual Basic har upprättat en referens till Excel på grund av en kodrad som anropar ett Excel-objekt, en metod eller en egenskap utan att kvalificera elementet med en Excel-objektvariabel. Visual Basic släpper inte den här referensen förrän du avslutar programmet. Den här felaktiga referensen stör automationskoden när koden körs mer än en gång.
Lösning
Lös problemet genom att ändra koden så att varje anrop till ett Excel-objekt, en metod eller en egenskap kvalificeras med rätt objektvariabel.
Status
Detta är avsiktligt.
Mer information
Om du vill automatisera Microsoft Excel skapar du en objektvariabel som vanligtvis refererar till Excel-programobjektet eller Excel-arbetsboksobjektet. Andra objektvariabler kan sedan ställas in för att referera till ett kalkylblad, ett område eller andra objekt i Microsoft Excel-objektmodellen. När du skriver kod för att använda ett Excel-objekt, en metod eller en egenskap bör du alltid föregå samtalet med rätt objektvariabel. Om du inte gör det etablerar Visual Basic en egen referens till Excel. Den här referensen kan orsaka problem när du försöker köra automationskoden flera gånger. Observera att även om kodraden börjar med objektvariabeln kan ett anrop göras till ett Excel-objekt, en metod eller en egenskap mitt på den kodrad som inte föregås av en objektvariabel.Följande steg visar hur du återskapar det här problemet och hur du korrigerar problemet.
Steg för att reproducera beteendet
-
Starta ett nytt Standard EXE-projekt i Visual Basic. Formulär1 skapas som standard.
-
Klicka på Referenser på Projekt-menyn och kontrollera sedan objektbiblioteket för den version av Excel som du tänker automatisera.
-
Placera en CommandButton-kontroll i Formulär1.
-
Kopiera följande kodexempel till kodfönstret i formulär1.
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 -
På menyn Kör klickar du på Start eller trycker på F5 för att starta programmet.
-
Klicka på kommandoknappen . Inga fel uppstår. En referens till Excel har dock skapats och har inte släppts.
-
Klicka på KommandoKnapp-kontrollen igen. Observera att du får något av de felmeddelanden som diskuteras i avsnittet Symptom.Obs! Felmeddelandet visas eftersom koden refererar till cellmetoden utan att föregå samtalet med xlSheet-objektvariabel.
-
Stoppa projektet och ändra följande kodrad:
xlSheet.Range(Cells(1,1),Cells(10,2)).Value = "Hello"
Ändra kodraden så att den liknar följande kodrad.
xlSheet.Range(xlSheet.Cells(1,1),xlSheet.Cells(10,2)).Value = "Hello"
-
Kör programmet igen. Observera att du kan köra koden flera gånger utan att få ett felmeddelande.
Referenser
189618 Du kan få felmeddelandet "Körningsfel '-2147023174' (800706ba)" eller "Körningsfel '462'" när du kör Visual Basic-kod som använder Automation för att styra Word