Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1484to1488
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bei Divisionserror feld leer lassen und fortfahren

Bei Divisionserror feld leer lassen und fortfahren
05.04.2016 13:57:59
Markus
Hi Leute!
vba:
Ich habe eine Schleife, die mir unzählige Exceldokumente ausliest und Werte daraus in eine Zieltabelle schreibt. In der Zieltabelle sollen vom Schleifen-Makro auch Divisionen vorgenommen werden mit den bekommenen Daten. Nun kann es aber auch vorkommen, dass 0-Werte eingetragen werden und infolgedessen kommt es zu Divisionen mit 0, woraufhin das Makro abbricht mit einer Fehlermeldung z.b Überlauf.
jetzt habe ich versucht das ganze so zu lösen, indem ich eine if Funktion eingebaut habe, die den Code des Datensatzes überprüft und bei bedarf, zu einer sprungmarke springt. Sobald dieser Punkt aber nun erreicht wird, springt er danach bei jedem weiteren Schleifendurchlauf nur noch zur Sprungmarke mit dem Ergebnis, dass nur noch die Code Zeile in die Zieltabelle eingetragen wird. In diesem Fall wäre das ActiveWorkbook.Sheets("Arbeiter").Cells(6, 6).
ThisWorkbook.Sheets("Tabelle3").Cells(i, 1) = ActiveWorkbook.Sheets("Arbeiter").Cells(6, 6)
'Bekannte Codes von Datensätzen mit 0-Werten
If ActiveWorkbook.Sheets("Arbeiter").Cells(6, 6).Value = 10920 Or 14378 Then
GoTo sprung
Else
ThisWorkbook.Sheets("Tabelle3").Cells(i, 2) = ActiveWorkbook.Sheets("Arbeiter").Cells(  _
_
31, 3)
ThisWorkbook.Sheets("Tabelle3").Cells(i, 3) = ActiveWorkbook.Sheets("Arbeiter").Cells(  _
_
31, 4)
ThisWorkbook.Sheets("Tabelle3").Cells(i, 4) = ThisWorkbook.Sheets("Tabelle3").Cells(i,   _
_
3) / ThisWorkbook.Sheets("Tabelle3").Cells(i, 2)
.'10 weitere Einträge
End If
sprung:
' Datei schließen, ohne Änderungen zu speichern
ActiveWorkbook.Close savechanges:=False
' neue Datei aus dem Ordner lesen
datei = Dir()
' Ende der Schleife
Loop
Kann mir jemand helfen?

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bei Divisionserror feld leer lassen und fortfahren
05.04.2016 14:45:55
fcs
Hallo markus,
die Syntay in deiner If-Prüfung ist nicht korrekt. Die Or-Prüfung ist immer auf die Zahl 14378 und nicht ob der Wert in der .Cells(6,6) =14378 ist.
Verwende hier eine Select Case Prüfung die wird einfacher, wenn noch mehr Werte dazu kommen.
Aber es ist fraglich, ob dies eine dauerhafte Lösung ist, denn jedes mal wenn ein Code dazukommt oder wegfällt musst du das Makro anpassen.
Die Lösung sollte sein, in jeder Zeile mit Division den Nenner auf 0 zu prüfen oder eine allgemeine Lösung, die bei einem Fehler an einer bestimmten Stelle weiter macht.
Außerdem kann man den Code etwas einkürzen, wenn man mit einem With-Konstukt arbeitet und einer Objekt-Variblen für das Tabellenblatt.
Gruß
Franz
'V A R I A N T E    1     - Funktion ?
Sub aaTest__1()
Dim wksArbeiter
Dim i
Do
Set wksArbeiter = ActiveWorkbook.Sheets("Arbeiter")
ThisWorkbook.Sheets("Tabelle3").Cells(i, 1) = wksArbeiter.Cells(6, 6)
Select Case wksArbeiter.Cells(6, 6).Value
Case 10920, 14378 'Bekannte Codes von Datensätzen mit 0-Werten
GoTo sprung
Case Else
With ThisWorkbook.Sheets("Tabelle3")
.Cells(i, 2) = wksArbeiter.Cells(31, 3)
.Cells(i, 3) = wksArbeiter.Cells(31, 4)
.Cells(i, 4) = .Cells(i, 3) / .Cells(i, 2)
'.'10 weitere Einträge
End With
End Select
sprung:
' Datei schließen, ohne Änderungen zu speichern
ActiveWorkbook.Close savechanges:=False
' neue Datei aus dem Ordner lesen
datei = Dir()
' Ende der Schleife
Loop
End Sub
'V A R I A N T E    2   - Mit Prüfung in Zeilen mit Division
Sub aaTest__2()
Dim wksArbeiter
Dim i
Do
Set wksArbeiter = ActiveWorkbook.Sheets("Arbeiter")
ThisWorkbook.Sheets("Tabelle3").Cells(i, 1) = wksArbeiter.Cells(6, 6)
'Bekannte Codes von Datensätzen mit 0-Werten
With ThisWorkbook.Sheets("Tabelle3")
.Cells(i, 2) = wksArbeiter.Cells(31, 3)
.Cells(i, 3) = wksArbeiter.Cells(31, 4)
If .Cells(i, 2) = 0 Then
.Cells(i, 4).ClearContents 'Inhalt löschen
Else
.Cells(i, 4) = .Cells(i, 3) / .Cells(i, 2)
End If
'.'10 weitere Einträge
End With
' Datei schließen, ohne Änderungen zu speichern
ActiveWorkbook.Close savechanges:=False
' neue Datei aus dem Ordner lesen
datei = Dir()
' Ende der Schleife
Loop
End Sub
'V A R I A N T E    3   - mit allgemeiner Fehlerbehandlung
Sub aaTest__3()
Dim wksArbeiter
Dim i
On Error GoTo Fehler
Do
Set wksArbeiter = ActiveWorkbook.Sheets("Arbeiter")
ThisWorkbook.Sheets("Tabelle3").Cells(i, 1) = wksArbeiter.Cells(6, 6)
With ThisWorkbook.Sheets("Tabelle3")
.Cells(i, 2) = wksArbeiter.Cells(31, 3)
.Cells(i, 3) = wksArbeiter.Cells(31, 4)
.Cells(i, 4) = .Cells(i, 3) / .Cells(i, 2)
'.'10 weitere Einträge
End With
sprung:
' Datei schließen, ohne Änderungen zu speichern
ActiveWorkbook.Close savechanges:=False
' neue Datei aus dem Ordner lesen
datei = Dir()
' Ende der Schleife
Loop
'usw
'usw.
Fehler:
With Err
Select Case .Number
Case 0 'alles OK
Case 11 'Laufzeitfehler, z.B. Division durch 0
Resume sprung 'wenn alle weiteren Berechnungen nicht gemacht werden sollen
'oder wenn z.B. der Inhalt der Ergebniszelle etwas gelöscht werden soll
ThisWorkbook.Sheets("Tabelle3").Cells(i, 4).ClearContents
Resume Next
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End Select
End With
End Sub

Anzeige
AW: Bei Divisionserror feld leer lassen und fortfahren
05.04.2016 16:43:16
Markus
Jo. So funktioniert das. Ich werde mich mit den Verbesserungsvorschlägen bezüglich der Codelänge befassen.
Danke dir vielmals Franz!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige