2015-07-31 11 views
5

Przeczytałem, jak używać On Error Resume Next i staram się dowiedzieć, jak długo ta linia będzie miała zastosowanie do programu. Na stronie Microsoftu znalazłem to zdanie: "An On Error Resume Następna instrukcja staje się nieaktywna po wywołaniu innej procedury." Co to dokładnie oznacza? Co uważa się za procedurę?VBA: Jak długo działa opcja On Error Resume Next?

Pytam, ponieważ używam wiersza w moim programie, ale nie chcę, aby to było Resume Next wszystkie błędy środowiska wykonawczego, które występują, po prostu oczywiste w następnym wierszu.


Kod: Dim zRange jako zakres

Call FilterTableFor(fieldNameColumn, Array("baseunitprice", "burden", "MTLBURRATE", "PurPoint", "Vendornum")) 

On Error Resume Next 
Set zRange = commentsColumnRange.SpecialCells(xlCellTypeVisible) 
zRange.Formula = "target" 

Call FilterTableFor(fieldNameColumn) 

Ja również znaleźć (i znane na chwilę), że On Error lub GoTo linie są uważane ubogich kodowania. Czy istnieje linia Try-Catch, której mogę użyć do takiej linii?

myślę tak:

Dim zRange As Range 

Call FilterTableFor(fieldNameColumn, Array("baseunitprice", "burden", "MTLBURRATE", "PurPoint", "Vendornum")) 

Try 
Set zRange = commentsColumnRange.SpecialCells(xlCellTypeVisible) 
zRange.Formula = "target" 
Catch() 

Call FilterTableFor(fieldNameColumn) 

Gdzie ja nawet nie robić nic z nim, bo nie czują takiej potrzeby.

Dzięki za poświęcony czas.

+1

Korzystanie '' On Error ... nie jest „uznawany za niski kodowanie”. Używa się go tylko * źle *. Nie ma "Spróbuj ... Złapać" w VBA. –

+0

@TimWilliams nie VBA nie przestrzega wszystkich zasad Visual Basic? – Tawm

+0

VBA to w zasadzie VB6. Nie jest to VB.NET – MatthewD

Odpowiedz

2

Chcesz tylko użyć "On Error Resume Next", kiedy

  1. wiesz dlaczego wystąpił błąd.

  2. Wiesz, że nie wpłynie to na inne części kodu.

  3. Używasz "On Error Goto 0" natychmiast po kodzie, w którym wystąpił błąd.

Powiedziawszy to, powinieneś prawie NIGDY go nie używać. Powinieneś dowiedzieć się, dlaczego wystąpił błąd i kod do obsługi.

Na stronie internetowej jest napisane, że po wyjściu z podfolderu lub funkcji, która go nazwała, następne życiorysy nie będą już miały wpływu, a twoje błędy będą wzrastać tak, jak powinny.

Lepszą alternatywą jest użycie goto w ten sposób. Ale niektórzy ludzie patrzą na to prawie tak samo.

sub SomeSub() 
    On Error Goto TestFailed 

    'Some code 

    'Some code 

    'Some code 

Exit sub 

TestFailed: 
    'Some code here to alert you to and/or handle the fallout of the error. 
End sub 
+0

Tak, aby zignorować jedną linię, chciałbym zrobić coś takiego: 'On Error Resume Next' ' błąd code' 'On Error Goto 0' wow, że jest brzydki, ale masz pomysł – Tawm

+0

YES Błąd wznowienia Dalej - następnie linia kodu - następnie Przy błędzie Przejdź do 0. Ale kieruj się ostrzeżeniami. Nie powinieneś mieć zwyczaju używania tego. Jeśli otrzymujesz konkretny błąd. Opublikuj kod tutaj w przepełnieniu stosu, a społeczność pomoże Ci dowiedzieć się, jak do niego kodować. – MatthewD

+0

Jeśli program byłby większy, chciałbym dowiedzieć się, jak naprawić błąd. Może to być napisane w ~ 30 liniach, więc myślę, że dodanie 3-10 linii do naprawy to strata czasu. Ale dziękuję! :) – Tawm

0

Nie zawsze trzeba sporo kodu do obsługi błędu, ale naprawdę powinien zrobić coś z nim. Może po prostu twój kod zmień właściwość cells.font.color na vbRed. Po prostu zrobienie On Error Resume Next (a line of code that might error) On Error Goto 0 jest strasznie kiepską formą.

I podobnie jak inni zwrócili uwagę, On Error Goto Label jest zasadniczo wersję VBA z dnia Try ... Catch i używam go frequently

0

Aby odpowiedzieć na to pytanie „Jak długo trwa On Error Resume Next działa?"

Odpowiedź brzmi: do kolejnej definicji On error ...

Więc jeśli zdefiniować On error resume next będzie przeskoczyć każdy błąd, aż zostanie określony On error goto 0 lub On error goto label

5

ZAKRES ON ERROR... ZESTAWIENIE

Funkcja nr ON ERROR ... kończy się, gdy pojawi się jedno z poniższych:

  1. Kolejna ON ERROR .... (Może w postaci ON ERROR RESUME x lub ON ERROR GOTO x)
  2. Exit Sub/Exit Function w obrębie tej samej sub/funkcji, gdzie określono.
  3. End Sub/End Function z sub/funkcji, gdzie określono.

jest źle KORZYSTAĆ ON ERROR RESUME NEXT?

Tak i Nie

powiedziałbym nie używać bez wiedząc, czego efektem byłoby to stwierdzenie. Unikaj, jeśli to możliwe. Zachowaj krótki zakres, gdy nie jest to możliwe.

zniweczyć efekt instrukcji ON ERROR RESUME NEXT można nazwać ON ERROR GOTO 0

+0

Proszę podać źródło? – Roland

+0

Nie mam żadnego odniesienia do źródła. Odpowiedź opiera się na moim doświadczeniu. Najlepszym sposobem weryfikacji jest sprawdzenie samego siebie.:) –

+1

@PradeepKumar Bycie po liście nie było problemem; Problem polegał na tym, że między znacznikami "**" a tekstem znajdowały się spacje. –

Powiązane problemy