Symptomy
Podczas uruchamiania kodu używającego automatyzacji do sterowania programem Microsoft Excel może wystąpić jeden z następujących błędów:
W programie Microsoft Excel 97 i w nowszych wersjach programu Excel jest wyświetlany jeden z następujących komunikatów o błędzie:Komunikat o błędzie 1
Błąd czasu wykonywania '1004':
Metoda "<nazwa metody>" obiektu "_Global" nie powiodła sięKomunikat o błędzie 2
Błąd zdefiniowany przez aplikację lub obiekt
W programie Microsoft Excel 95 jest wyświetlany jeden z następujących komunikatów o błędach:
Komunikat o błędzie 1
Błąd "2147023174"
w czasie wykonywania Błąd automatyzacji OLEKomunikat o błędzie 2
Błąd czasu wykonywania '462':
Serwer zdalny nie istnieje lub jest niedostępny.Przyczyna
Język Visual Basic ustanowił odwołanie do programu Excel ze względu na wiersz kodu, który wywołuje obiekt, metodę lub właściwość programu Excel bez kwalifikowania elementu za pomocą zmiennej obiektowej programu Excel. Język Visual Basic nie zwalnia tego odwołania do czasu zakończenia programu. To błędne odwołanie koliduje z kodem automatyzacji, gdy kod jest uruchamiany więcej niż jeden raz.
Rozwiązanie
Aby rozwiązać ten problem, zmodyfikuj kod, tak aby każde wywołanie obiektu, metody lub właściwości programu Excel było kwalifikowane przy użyciu odpowiedniej zmiennej obiektowej.
Stan
Takie działanie jest celowe.
Więcej informacji
Aby zautomatyzować program Microsoft Excel, należy ustanowić zmienną obiektową, która zwykle odwołuje się do obiektu Aplikacji programu Excel lub obiektu skoroszytu programu Excel. Inne zmienne obiektowe można następnie skonfigurować tak, aby odwoływać się do arkusza, zakresu lub innych obiektów w modelu obiektów programu Microsoft Excel. Podczas pisania kodu w celu użycia obiektu, metody lub właściwości programu Excel należy zawsze poprzedzić wywołanie odpowiednią zmienną obiektową. W przeciwnym razie język Visual Basic ustanawia własne odwołanie do programu Excel. To odwołanie może powodować problemy podczas próby wielokrotnego uruchamiania kodu automatyzacji. Zwróć uwagę, że nawet jeśli wiersz kodu zaczyna się od zmiennej obiektowej, może zostać wywołanie obiektu, metody lub właściwości programu Excel pośrodku wiersza kodu, który nie jest poprzedzony zmienną obiektową.
W poniższych krokach pokazano, jak odtworzyć ten problem i jak go rozwiązać.Procedura odtwarzania zachowania
-
Rozpoczynanie nowego projektu Standard EXE w języku Visual Basic. Domyślnie tworzony jest formularz1.
-
W menu Projekt kliknij polecenie Odwołania, a następnie sprawdź w bibliotece obiektów wersję programu Excel, którą zamierzasz zautomatyzować.
-
Umieść kontrolkę CommandButton w formularzu Form1.
-
Skopiuj poniższy przykład kodu do okna kodu formularza 1.
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
-
W menu Uruchom kliknij przycisk Start lub naciśnij klawisz F5, aby uruchomić program.
-
Kliknij kontrolki CommandButton . Nie występuje żaden błąd. Jednak odwołanie do programu Excel zostało utworzone i nie zostało opublikowane.
-
Kliknij ponownie kontrolki CommandButton . Zwróć uwagę, że jest wyświetlany jeden z komunikatów o błędach omówionych w sekcji "Objawy".
Uwaga Komunikat o błędzie występuje, ponieważ kod odwołuje się do metody komórki bez poprzedzania wywołania zmienna obiektowa xlSheet. -
Zatrzymaj projekt i zmień następujący wiersz kodu:
xlSheet.Range(Cells(1,1),Cells(10,2)).Value = "Hello"
Zmień wiersz kodu tak, aby przypominał następujący wiersz kodu.
xlSheet.Range(xlSheet.Cells(1,1),xlSheet.Cells(10,2)).Value = "Hello"
-
Uruchom program ponownie. Zwróć uwagę, że kod można uruchamiać wiele razy bez otrzymywania komunikatu o błędzie.
Informacje
189618 Może zostać wyświetlony komunikat o błędzie "Błąd czasu wykonywania "-2147023174" (800706ba)" lub "Błąd czasu wykonywania '462'" podczas uruchamiania kodu języka Visual Basic używającego automatyzacji do sterowania Word