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

  1. Starta ett nytt Standard EXE-projekt i Visual Basic. Formulär1 skapas som standard.

  2. Klicka på ReferenserProjekt-menyn och kontrollera sedan objektbiblioteket för den version av Excel som du tänker automatisera.

  3. Placera en CommandButton-kontroll i Formulär1.

  4. 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
    
  5. menyn Kör klickar du på Start eller trycker på F5 för att starta programmet.

  6. Klicka på kommandoknappen . Inga fel uppstår. En referens till Excel har dock skapats och har inte släppts.

  7. 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.

  8. 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"
    
  9. 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  

Behöver du mer hjälp?

Vill du ha fler alternativ?

Utforska prenumerationsförmåner, bläddra bland utbildningskurser, lär dig hur du skyddar din enhet med mera.