Symptomer
Når du kjører kode som bruker automatisering til å kontrollere Microsoft Excel, kan det oppstå én av følgende feil:
I Microsoft Excel 97 og senere versjoner av Excel får du en av følgende feilmeldinger:Feilmelding 1
Kjøretidsfeil '1004':
Metoden <navnet på metoden> for objektet _Global mislyktesFeilmelding 2
Programdefinert eller objektdefinert feil
I Microsoft Excel 95 får du en av følgende feilmeldinger:
Feilmelding 1
Kjøretidsfeil -2147023174
OLE-automatiseringsfeilFeilmelding 2
Kjøretidsfeil '462':
Den eksterne servermaskinen finnes ikke eller er ikke tilgjengelig.Årsak
Visual Basic har opprettet en referanse til Excel på grunn av en kodelinje som kaller opp et Excel-objekt, en metode eller en egenskap uten å kvalifisere elementet med en Excel-objektvariabel. Visual Basic frigir ikke denne referansen før du avslutter programmet. Denne feilreferansen forstyrrer automatiseringskoden når koden kjøres mer enn én gang.
Løsning
Du kan løse dette problemet ved å endre koden slik at hvert kall til et Excel-objekt, en metode eller en egenskap er kvalifisert med den riktige objektvariabelen.
Status
Denne virkemåten er etter utforming.
Mer informasjon
Hvis du vil automatisere Microsoft Excel, oppretter du en objektvariabel som vanligvis refererer til Excel-programobjektet eller Excel-arbeidsbokobjektet. Andre objektvariabler kan deretter angis til å referere til et regneark, et område eller andre objekter i Microsoft Excel-objektmodellen. Når du skriver kode for å bruke et Excel-objekt, en metode eller en egenskap, bør du alltid sette den riktige objektvariabelen foran kallet. Hvis du ikke gjør det, etablerer Visual Basic sin egen referanse til Excel. Denne referansen kan forårsake problemer når du prøver å kjøre automatiseringskoden flere ganger. Vær oppmerksom på at selv om kodelinjen begynner med objektvariabelen, kan det utføres et kall til et Excel-objekt, en metode eller en egenskap midt på kodelinjen som ikke står foran en objektvariabel.
Følgende trinn illustrerer hvordan du reproduserer dette problemet og hvordan du løser problemet.Trinn for å gjenskape virkemåten
-
Start et nytt Standard EXE-prosjekt i Visual Basic. Skjema1 er opprettet som standard.
-
Klikk Referanser på Prosjekt-menyen, og kontroller deretter objektbiblioteket for versjonen av Excel du har tenkt å automatisere.
-
Plasser en CommandButton-kontroll på Skjema1.
-
Kopier følgende kodeeksempel til kodevinduet i Skjema1.
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
-
Klikk Start på Kjør-menyen, eller trykk på F5 for å starte programmet.
-
Klikk CommandButton-kontrollen . Det oppstår ingen feil. En referanse til Excel er imidlertid opprettet og er ikke utgitt.
-
Klikk CommandButton-kontrollen på nytt. Legg merke til at du får en av feilmeldingene som beskrives i delen Symptomer.
Obs! Feilmeldingen oppstår fordi koden refererer til cellemetoden uten å kalle opp xlSheet-objektvariabel. -
Stopp prosjektet, og endre følgende kodelinje:
xlSheet.Range(Cells(1,1),Cells(10,2)).Value = "Hello"
Endre kodelinjen slik at den ligner på følgende kodelinje.
xlSheet.Range(xlSheet.Cells(1,1),xlSheet.Cells(10,2)).Value = "Hello"
-
Kjør programmet på nytt. Legg merke til at du kan kjøre koden flere ganger uten å motta en feilmelding.
Referanser
189618 Du kan få feilmeldingen «Kjøretidsfeil –2147023174» (800706ba)» eller «Kjøretidsfeil 462» når du kjører Visual Basic-kode som bruker automatisering til å kontrollere Word