Ten samouczek wyjaśni, co oznacza błąd automatyzacji VBA i jak on występuje.
Excel składa się z obiektów - obiektu Workbook, obiektu Worksheet, obiektu Range i obiektu Cell, aby wymienić tylko kilka. Każdy obiekt ma wiele właściwości i metod, których zachowaniem można sterować za pomocą kodu VBA. Jeśli kod VBA nie jest poprawnie zaprogramowany, może wystąpić błąd automatyzacji. Jest to jeden z bardziej frustrujących błędów w VBA, ponieważ często pojawia się bez wyraźnego powodu, gdy kod wygląda idealnie!
(Zobacz nasz Przewodnik obsługi błędów, aby uzyskać więcej informacji na temat błędów VBA)
Odniesienie do zmiennej, która nie jest już aktywna
Błąd automatyzacji może wystąpić, gdy odwołujesz się do skoroszytu lub arkusza roboczego za pomocą zmiennej, ale zmienna nie jest już aktywna.
1234567891011 | Automatyzacja podtestów()Dim strFile As StringDim wb jako skoroszyt'otwórz plik i ustaw zmienną skoroszytustrFile = Aplikacja.PobierzOpenFilenameUstaw wb = Skoroszyty.Open(strFile)'Zamknij skoroszytwb.Zamknij'spróbuj aktywować skoroszytwb.AktywujNapis końcowy |
Gdy uruchomimy powyższy kod, otrzymamy błąd automatyzacji. Wynika to z faktu, że otworzyliśmy skoroszyt i przypisaliśmy do tego skoroszytu zmienną. Następnie zamknęliśmy skoroszyt, ale w następnym wierszu kodu próbujemy aktywować zamknięty skoroszyt. Spowoduje to błąd, ponieważ zmienna nie jest już aktywna.
Jeśli chcemy aktywować skoroszyt, najpierw musimy go otworzyć!
Przeciążenie pamięci
Ten błąd może również czasami wystąpić, jeśli masz pętlę i zapomnisz wyczyścić obiekt w trakcie pętli. Jednak może się to zdarzyć tylko czasami, a nie inne – co jest jednym z powodów, dla których ten błąd może być tak irytujący.
Weźmy na przykład poniższy kod:
1234567891011121314151617 | Sub Wstaw obraz()Dim i jako liczba całkowitaDim shp jako obiektDla i = 1 do 100Z Arkuszami("Arkusz1")'ustaw zmienną obiektuUstaw shp = .OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, DisplayAsIcon:=False, Left:=.Cells(i, "A").Left, Top:=.Cells( i, „A”). Góra, Szerokość:=264, Wysokość:=124)Kończyć zZ shp.Object.PictureSizeMode = 3'załaduj zdjęcie.Object.Picture = LoadPicture("C:\data\image" & ja & ".jpg").Object.BorderStyle = 0.Object.BackStyle = 0Kończyć zDalej jaNapis końcowy |
Zmienna jest zadeklarowana jako Object, a następnie USTAWIĆ słowo kluczowe służy do przypisania obrazu do obiektu. Obiekt jest następnie wypełniany obrazem i wstawiany do arkusza Excela, przy czym w tym samym czasie odbywa się pewne formatowanie. Następnie dodajemy pętlę do kodu, aby wstawić 100 obrazów do arkusza Excela. Czasami powoduje to błąd automatyzacji, ale czasami nie - frustrujące, prawda?
Rozwiązaniem tego problemu jest wyczyszczenie zmiennej obiektu w pętli poprzez ustawienie obiektu na NIC - to zwolni pamięć i zapobiegnie błędom.
12345678910111213141516171819 | Sub Wstaw obraz()Dim i jako liczba całkowitaDim shp jako obiektDla i = 1 do 100Z Arkuszami("Arkusz1")'ustaw zmienną obiektuUstaw shp = .OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, DisplayAsIcon:=False, Left:=.Cells(i, "A").Left, Top:=.Cells( i, „A”). Góra, Szerokość:=264, Wysokość:=124)Kończyć zZ shp.Object.PictureSizeMode = 3'załaduj zdjęcie.Object.Picture = LoadPicture("C:\data\image.jpg").Object.BorderStyle = 0.Object.BackStyle = 0Kończyć z'wyczyść zmienną obiektu'Ustaw shp = NicDalej jaNapis końcowy |
Błędy DLL i aktualizacja systemu Windows
Czasami pojawia się błąd i nic nie można zrobić w kodzie VBA. Ponowna rejestracja używanych bibliotek DLL, upewnienie się, że nasz system Windows jest aktualny i w ostateczności, przeprowadzanie kontroli rejestru jako czasami jedyne rzeczy, które mogą działać, aby usunąć ten błąd.
Dobrym sposobem na uniknięcie tego błędu jest upewnienie się, że pułapki błędów są na miejscu za pomocą W przypadku błędu Przejdź do lub W przypadku błędu Wznów Dalej rutyny.