Excel vba wenn fehler dann überspringen

Kein schönes Thema, aber leider doch notwendig. Denn wenn ein Laufzeitfehler auftritt weiß man, da ist was falsch. Und es beginnt die Fehlersuche.

Doch erstmal von vorn. Wenn Sie in einem Modul Code schreiben, wird bereits beim Schreiben geprüft, ob die Code-Syntax richtig ist. Allerdings erst dann, wenn Sie die Zeile wechseln.

Wie die Syntax überprüft werden soll, können Sie in den Optionen des VBA-Editors einstellen:

Excel vba wenn fehler dann überspringen

Hier ist alles aktiviert. Wenn Sie erst mit Makros anfangen sollten Sie es einfach mal ausprobieren.

Beim Kompilieren wird der gesamte Code im Projekt geprüft. Da werden dann auch ggf. Codeteile geprüft, die Sie nicht im Projekt verwenden, die Sie bei Fehlern auskommentieren müssen. 

Trotzdem kann es vorkommen, dass Fehler erst zur Laufzeit auftreten. Es können Variablen nicht die erwarteten Werte haben, Objekte wurden nicht richtig zugewiesen, die Lebensdauer von Variablen nicht beachtet. 

Der Code wird dann unterbrochen und Sie werden gefragt, ob die Debuggen wollen. Wenn Sie bejahen, wird der VBA Editor geöffnet und die Zeile mit dem Fehler gelb markiert. Der Code befindet sich aber noch in der Laufzeit, was bedeutet, daß Sie den Inhalt von Variablen prüfen können, wenn Sie mit der Maus über den Namen der Variablen fahren.

Excel vba wenn fehler dann überspringen

Der VBA Editor bietet Ihnen beim Auslösen des Fehlers eine Fehlernummer an. In der Hilfe können Sie ggf. nachlesen, was dieser Fehler bedeutet. Aber leider ist die Fehlernummer selten sehr aussagekräftig.

Wenn Sie ein Projekt weitergegeben haben ist es natürlich sehr lästig, wenn jemand plötzlich im VBA Editor steht und nicht weiß, was der Code bedeuten soll. Daher sollten Sie immer Fehlerroutinen in Ihre Projekte einbauen. 

Dazu steht Ihnen das Err-Objekt zur Verfügung. Dieses zeigt Ihnen alle auffangbaren Fehler mit der Fehlernummer und einer Fehlerbeschreibung an. Zusätzlich können Sie mit dem Befehl On Error Aktionen ausführen wie den Code abbrechen oder einzelne Zeilen überspringen, die den Fehler auslösen.

So könnte ein Beispiel aussehen:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

Sub Fehlertest()

    Dim MyFehler As ErrObject

    Dim MyNr As Long

     'ab jetzt werden die Zeilen mit Fehlern übergangen
    On Error Resume Next

     'Diese Zeile löst ein Fehler aus
     'Wissen Sie welchen????? Wenn nein - prüfen Sie es mal nach...
    MyNr = "eins"

     'die Nummer wird angezeigt
    MsgBox MyNr

     'das "On Error Resume Next" wird hier wieder ausgeschaltet
    On Error GoTo 0

    On Error GoTo Ende

    Exit Sub     'wichtige Zeile!

Ende:
    MsgBox "Es ist folgender Fehler aufgetreten: " & err.Number
    Resume Next

End Sub 

In Zeile 8 wird die Fehlerbehandlung festgelegt. Sollte in einer Zeile ein Fehler auftreten, wird diese Zeile ignoriert und der Code weiter ausgeführt. Aber Achtung: Es könnten Folgefehler auftreten und der gesamte Code wird dadurch nicht mehr richtig ausgeführt. Daher genau prüfen, ob die Funktion sinnvoll ist. Außerdem wirkt diese Fehlerbehandlung ggf. auch in Funktionen und anderen Prozeduren weiter, was nicht immer erwünscht ist. Dazu müssen Sie die Zeile 18 benutzen. Hier wird die Fehlerbehandlung praktisch wieder ausgeschaltet.

Hallo! Ich habe mir in Excel mit VBA eine Schleife gebastelt zur Zielwertsuche. Da ich VBA sonst nie brauche möchte ich hierfür nicht erst VBA lernen. Daher hier meine Frage ob mir hier jemand helfen kann. Es geht um folgendes Skript. Dieses macht Probleme wenn zwischen den Zeilen Leerzeilen sind (Fehler 400). Kann man das irgendwie verhindern? Die leeren Zeilen z.B. überspringen?

Vielen Dank!

Sub PreisBerechnung()
Dim IntZeile As Integer
For IntZeile = 4 To 199
Cells(IntZeile, 33).GoalSeek Goal:=2.5, ChangingCell:=Cells(IntZeile, 26)

Next
End Sub

...komplette Frage anzeigen

1 Antwort

Excel vba wenn fehler dann überspringen

blablub7

Topnutzer im Thema Microsoft Excel

22.02.2015, 21:32

Leere Zellen kannst du mit

IsEmpty(Cells(IntZeile, 33)) 

identifizieren.

Sub PreisBerechnung()
    Dim IntZeile As Integer

    For IntZeile = 4 To 199
        If Not IsEmpty(Cells(IntZeile, 33))) Then
            Cells(IntZeile, 33).GoalSeek Goal:=2.5, ChangingCell:=Cells(IntZeile, 26)
        End If    
    Next
End Sub

Das sollte dein Problem lösen

Weitere Antworten zeigen

Ähnliche Fragen

VBA Ausgewählte Zeilen kopieren und in anderer Tabelle einfügen (mit Variablen)?

Hallo Zusammen,

Ich hab ein Problem. Ich würde gern durch das schreiben einer 1 hinter meiner Materialsammlung per Knopfdruck alle gewählten Zeilen in eine Zusammengestellte Tabelle einfügen.

Die Materialsammlung bei der ich auswähle ist in Tabelle zwei und wird dann per Knopfdruck abgefragt. Die markierten sollen dann in Tabelle 1 in eine Tabelle eingefügt werden.

Da ich aber mit Variablen Arbeite ist das schwieriger als gedacht

Hier mein code zum verdeutlichen

Private Sub CommandButton1_Click()

Dim strBereich As Range Dim x As Integer

For x = 3 To 60 If Worksheets(2).Cells(x, 10) = "1" Then

Worksheets(1).Range(Cells(x, 2), Cells(x, 9))=Worksheets(2).Range(Cells(x, 1), Cells(x, 8))

End If Next x

End Sub

funktioniert leider aber nicht.

Bitte im Hilfe

...zur Frage

In Excel VBA eine If-Schleife um zwei Zeilen voneinander zu subtrahieren (Uhrzeitformat und abs- Funktion inbegriffen)?

Mein Bisheriger Versuch:

For j = 4 To 700

With ActiveWorksheet

If .Cells(j, 2) = "" Then Exit For

If Minute(Abs(.Cells(j, 8).Value) - Abs(.Cells(j - 1, 8).Value)) >= 1 Then _

Call FilterCopieVerspätung

End With
Next j

End Sub

Problem: Typenkonflikt

...zur Frage

Hallo, ich möchte in einer Excel Datei per vba code bis zur ersten leeren zeile gehen, wie tue ich das?

 

ich möchte zur ersten leeren Zeile gehen und dann den rest markieren und löschen, also den kompletten Bereich ab da? BSp. A10 ist leer, dann möchte ich ab A10:z10 und abwärts alles markieren und löschen

Wie??

 

Sub FIND_EMPTY_CELL()
   
    Dim zeil As Integer
    Dim z As Integer
    Dim leerAbWo As Long
   
    zeil = ActiveSheet.UsedRange.Rows.Count 'letzte ausgefüllte Zeile
   
    For z = 8 To zeil

            If Cells(z, 1) = "" Then
                'leere Zelle gefunden
                leerAbWo = Cells(z, 1).Select 'gefundene Zelle selektieren
                'jetzt ab da an bis AA markieren und rest löschen!!!
                MsgBox leerAbWo
                Exit Sub
            End If
    Next z
End Sub

...zur Frage

Vba Programm schleife um viele Variablen zu deklarieren

hey habe folgendes Problem: ich brauche in meinem Programm sehr viele Variablen und möchte allen einen wert zuweisen kann ich das übersichtlich in eine schleife packen also nicht so: W1=3 W2=3 W3=3 W4=3 ....... statt dessen will ich alles in eine schleife packen erster versuch:

Dim schleife As Integer
schleife = 1
Do While schleife < 73
W& schleife = 3        'hier ist das problem^^
schleife = schleife + 1
Loop

schon mal danke für eure vorschläge ;)

...zur Frage

Excel VBA - Umkehrfunktion, und alle Zeilen nach Begriff durchsuchen?

Hallo,

ich habe ein Problem mit Excel VBA. Ich habe eine Arbeitstabelle, die inzwischen über 76000 Zeilen beinhaltet. Deshalb möchte ich mit VBA eine Userform erstellen, die das Suchen einer bestimmten Zeile leichter macht.

Bis jetzt läuft es ganz gut, aber ich habe 1. das Problem, dass wenn ich einen Suchbegriff in eines der Textfelder eingebe, er mir immer nur die erste Zeile markiert, in der der Begriff steht. Da aber der Begriff noch öfter vorkommt, bringt es mir ja nichts, nur die erste Zeile markiert zu bekommen.

Das 2. Problem ist, dass bis jetzt nur die gesuchte Zeile farbig markiert wird. Ich möchte es aber hinbekommen, dass alle Zeilen, bei denen der Suchbegriff nicht vorkommt, ausgeblendet werden.

Hier mein bisheriges Skript für das erste Suchkriterium:

Sub Suche_Click()

Dim x As String

Dim Z As Integer

Dim temp As Integer

Z = Sheets(1).UsedRange.Rows.Count

x = Belegnr1 [Textbox-Name]

temp = 0

For i = 2 To Z

    If Cells(i, 1) = x Then

        temp = 1

        Exit For

      End If

Next

If temp = 1 Then

   

  ActiveSheet.Rows(i).Interior.ColorIndex = 6

   

  ' ActiveSheet.Rows(i).Hidden = False [Hier Problem Nr.2 ! ]

   

  ' ActiveSheet.Rows.Hidden = True

   

Else

' ActiveSheet.Rows.Hidden = True

MsgBox "Belegnummer nicht vorhanden. Bitte prüfen Sie ihre Eingabe."

End If

End Sub

Danke im Voraus!

...zur Frage

Makro zum Zusammenfassen von Spalten

Hallo alle zusammen,

ich hab ein kleines Problem mit einem Makro, welches ich mir mit Hilfe diverser Quellen versucht habe auf meinen Fall zusammenzuschustern. Folgendermaßen kann man sich die Grundsituation vorstellen:

Ich habe in den Spalten D Und E ca 70 Zeilen mit Einträgen. Bis auf die Zellen 11 - 14 Ist die Spalte E leer. Also wollte ich ein Makro benutzen, welches die Spalte D wenn D und/oder E leer sind mit E zusammenfasst und sonst nicht.

Das soll dann auch für die Spalten F,G und H,I und immer soweiter klappen. Wer könnte mir Helfen und zeigen wo mein Fehler liegt denn bisher funktioniert das Makro nicht ganz so wie ich mir das vorgestellt habe.


Sub Formatierung()

Dim Zeile As Integer Dim Spalte As Integer

For Spalte = 4 To 256 Step 2
For Zeile = 1 To 100

If ((Not (IsEmpty(Cells(Spalte, Zeile)))) = True And IsEmpty(Cells(Spalte + 1, Zeile)) = True) Then
Range(Cells(Zeile, Spalte), Cells(Zeile, Spalte + 1)).Merge
End If

If IsEmpty(Cells(Spalte, Zeile)) = True And IsEmpty(Cells(Spalte + 1, Zeile)) = True Then
Range(Cells(Zeile, Spalte), Cells(Zeile, Spalte + 1)).Merge
End If

Next Zeile

Next Spalte

End Sub


So sieht das bisher aus. Für jede Hilfe vorab schonmal besten Dank

...zur Frage

Wie ermittelt man in Excel (VBA) den Zelleninhalt bei verbundenen Zellen?

Ich durchlaufe in meinem Excel VBA-Script die Zellen einer Spalte, um den Zelleninhalt auszuwerten. Nun kann es passieren daß Zellen "verbunden" sind. In diesem Fall liefert mir das Script nur jeweils für die linke oberste Zelle der verbundenen Zellen den Wert zurück. In den anderen Zellen kommt Blank zurück. Ich würde in allen Zellen den gleichen Wert zurückerwarten?
Wie könnte man das bewerkstelligen?
Hardcopy/Beispiel: In den grünen Spalten steht was ich erwarten würde. In den gelben die tatsächliche VBA-Ausgabe.

Private Sub Worksheet_Activate()
  Dim iRow As Integer
  iRow = 4
  Do
    Worksheets("Test").Cells(iRow, 5) = Worksheets("Test").Cells(iRow, 1)
    Worksheets("Test").Cells(iRow, 7) = Worksheets("Test").Cells(iRow, 2)
    iRow = iRow + 1
    If iRow > Worksheets("Test").UsedRange.Rows.Count Then Exit Do
  Loop
End Sub

...zur Frage

VBA: Automatisch mehrere Tabellenblätter löschen?

Moin, ich möchte gerne mehrere Tabellenblätter löschen (Excel -> VBA). Das Problem dabei: Die Nummer des ersten und letzten zu löschenden Blattes soll abgefragt werden. Habe jetzt schon die eine oder andere Zeile "zusammengebastelt", allerdings läuft das Sub noch nicht so ganz rund. Kann mir da jemand weiterhelfen?? Bin mit VBA leider nicht so vertraut....

Sub Aufgabe 17()

Dim intWert1 As Integer
Dim intWert2 As Integer
Dim intWert3 As Integer

intWert1 = InputBox("Nummer des ersten zu löschenden Blattes?", "Tabellenblätter löschen", 0)
intWert2 = InputBox("Nummer des letzten zu löschenden Blattes?", "Tabellenblätter löschen", 0)

Application.DisplayAlerts = False

For intWert3 = intWert1 To intWert2
    intWert3 = "Tabelle" + intWert1
    Worksheets(intWert3).Delete
Next intWert3

Application.DisplayAlerts = True

End Sub

...zur Frage

Excel VBA jede n-te Zeile finden und bei der Ausgabe die Steps ignorieren?

Moin zusammen, ich baue aktuell in VBA eine Excel Liste bzw. versuche eine auszuwerten. Ziel, jede 21ste Zeile soll ausgelesen und zusammengefasst ausgegeben werden. Leider gibt er die Werte genau in den Steps aus in denen er Sie liest und ich komme mit meinem Probieren nicht weiter. Hat jemand eine Lösung?

Hier der Code:

Sub AlternativeZeilenAuswaehlen()

  Dim bereich1 As Range

  Dim bereich2 As Range

  Dim x As Integer

  Dim y As Integer

  Dim ZeilenNr As Integer

  'Den Bereich auswählen

  Set bereich1 = Range("'Test Yvonne Excel (2)'!E1:E30000")

  Set bereich2 = Range("Tabelle1!B5:B30000")

  'Zeilen zählen

  ZeilenNr = bereich1.Rows.Count

  ZeilenNr = bereich2.Rows.Count

  'Jede zweite Zelle im Bereich durchlaufen

  For x = 3 To ZeilenNr Step 21

  'den Wert aus Spalte B in Spalte C eintragen

    bereich2.Cells(x, 1).Offset(0, 0) = bereich1.Cells(x, 1)

  Next

End Sub

...zur Frage

Tabellen mit vba nebeneinander anstatt untereinander anordnen?

Hallo,

ich habe bereits meine Excel-Arbeitsmappe bestehend aus 250 Seiten mit jeweils 2Spalten und 250 Zeilen via vba zusammengeführt.

Allerdings wird dabei alles untereinander dargestellt und nicht nebeneinander. Kann man es so machen, dass sobald ein Worksheet abgearbeitet wurde und angezeigt wird, das nächste daneben in der Spalte beginnen lässt und immer so weiter.

Gibt es Möglichkeiten dort eine Art „Cut“ zu machen?

Sub Konsolidieren()
Dim Wks As Worksheet
Dim Bereich As Range
Dim strLC As String
Dim i As Integer
Set Wks = Worksheets.Add
Wks.Name = "Gesamt"
For i = 2 To Worksheets.Count
 With Worksheets(i).UsedRange
 strLC = .Cells(.Rows.Count, .Columns.Count).Address
 Set Bereich = .Range("A1:" & strLC)
 Bereich.Copy Destination:= _
 Wks.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
 End With
Next i
End Sub

...zur Frage

Excel: Schiebepuzzle programmieren - Laufzeitfehler 424?

Liebe Community, ich habe versucht eine Schiebepuzzle aus Zahlen in Excel zu programmieren. Den Text seht ihr unten. Jedoch sobald ich auf Ausführen (Wiedergabe-Button) drücke, kommt folgender Fehler:

Was macht On Error Resume Next?

On Error Resume Next ist die „primitivste“ Form der Fehlerbehandlung: Fehlerhafte Codezeilen, die nach dieser Anweisung auftauchen, werden einfach ignoriert, der Code wird in der nächsten Zeile nach dem Fehler weiter abgearbeitet.

Was bedeutet Laufzeitfehler 1004?

Das steckt hinter dem Laufzeitfehler 1004 in Excel Wenn Ihr Excel-Diagramm mehr Legendeneinträge besitzt, als Speicherplatz für diese Einträge im Diagramm zur Verfügung steht, kann es zu einem Fehler kommen. Dieser entsteht vor allem dann, wenn für die Änderung der Legendeneinträge ein VBA-Makro verwendet wird.

Wo programmiert man VBA?

Visual Basic für Applikationen, kurz VBA, ist eine leicht erlernbare Programmiersprache. Sie ist in den meisten Programmen von Microsoft Office, aber auch anderen Programmen eingebaut.

Wie öffnet man in Excel VBA?

Access. Klicken Sie auf der Registerkarte Datenbanktools in der Gruppe Makro auf Visual Basic. Klicken Sie im Visual Basic-Editor im Menü Hilfe auf Hilfe zu Microsoft Visual Basic. Klicken Sie im Fenster Hilfe auf Access VBA-Referenz.