Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
532to536
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
532to536
532to536
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Problem mit "On Error..."
14.12.2004 13:41:14
Jan
Hallo Profis.
Ich habe folgendes Problem.
Das Array Summe habe ich als Integer definiert. Nun möchte ich Zahlen einlesen.
Sollte es sich um keine Zahl, sondern um ein Wort handeln, so sollte die "On Error Goto asd" - Funktion das Einlesen überspringen.
Allerdings ist dies nicht der Fall.
Habe den betreffenden Befehl durch viel Leerzeilen vom übrigen Code abgetrennt.
Vielen Danke im Voraus für Eure Hilfe,
mit freundlichen Grüßen, Jan Smendseng
Dim Datu As Variant
Dim EinAus(6 To 26) As Integer
Dim Div(6 To 26) As Integer
Dim Summe(6 To 26) As Integer

Sub Berechnung1()
Sheets(Tabelle4.Name).Select
Call löschen
'Die Variable, die später die Ausgabezeile angibt wird auf 99 festgelegt
Counter = 99
'Eine Schleife überprüft, welche Spalten aktiviert sind. Ist eine Spalte mit "nicht belegt"
'benannt, so wird der Variablen EinAus dieser Spalte 0 sonst 1 zugewiesen.
For Column = 6 To 26 Step 1
If Tabelle1.Cells(7, Column).Value = "nicht belegt" Then
EinAus(Column) = 0
Else
EinAus(Column) = 1
End If
Next
'Nun wird überprüft, welche Darstellung der Benutzer gewählt hat. Hat er Tagesdarstellung
'gewählt, wird folgender Code ausgeführt.
If Tabelle6.ComboBox10.Value = "Tagesdarstellung" Then
Call FormatTag
'Zunächst wird die erste Zeile der Tabelle gesucht, in der sich den Kriterien ent-
'sprechende Werte befinden. Diese werden dann auch gleich eingelesen.
For StartRow = 8 To 65536 Step 1
'Hier werden die Kriterien überprüft...
If (Tabelle1.Cells(StartRow, 3).Value = Tabelle4.Cells(96, 1).Value Or Tabelle4.Cells(96, 1).Value = "") And (Tabelle1.Cells(StartRow, 4).Value = Tabelle4.Cells(96, 2).Value Or Tabelle4.Cells(96, 2).Value = "") And (Tabelle1.Cells(StartRow, 5).Value = Tabelle4.Cells(96, 3).Value Or Tabelle4.Cells(96, 3).Value = "") Then
'Entspricht es den Kriterien wird das Datum des Eintrags in die Variable Datu gespeichert.
Datu = Tabelle1.Cells(StartRow, 2).Value
'Eine Schleife liest die Daten aller aktiven Spalten in die Variable Summe ein.
For Column = 6 To 26 Step 1
If EinAus(Column) = 1 Then
'Würde man einen Buchstaben in die als Integer dimensionierte Variable einlesen wollen, so
'würde es zu einem Fehler kommen. Dieser Vorgang wird durch "On Error GoTo weiter" übergangen.
On Error GoTo weiter1
'Leerzellen würden beim Einlesen in die Integer Variable als 0 aufgenommen werden. Die
'Einlesung erfolgt also nur, wenn die Zelle nicht leer ist.
If Not Tabelle1.Cells(StartRow, Column).Value = "" And Tabelle1.Cells(StartRow, Column).Value = "-" Then
Summe(Column) = Tabelle1.Cells(StartRow, Column).Value
'Ist die Einlesung erfolgt, muss auch der Divisor um den Wert 1 erweitert werden. Da dies
'Die erste Einlesung ist, ist der Divisor 0 + 1 = 1
Div(Column) = 1
End If
weiter1:
End If
Next
Exit For
End If
Next
'Die nächste Schleife kämmt sich durch die komplette Tabelle bis zum letzten Eintrag bzw. Zeile 65536.
For Row = StartRow + 1 To 65536 Step 1
'Ist die Schleife bei einer leeren Zeile angekomme, so nimmt das Programm an, die Eintragungen sind zuende. Dabei
'wird die Datumsspalte als referenz genommen.
'In diesem Fall wird die Schleife beendet und der in den Variablen Summe gespeicherte Wert durch den in der Variablen
'Div gespeicherten Wert geteil. Das Programm ist dann beendent.
If Tabelle1.Cells(Row, 2).Value = "" Then
Counter = Counter + 1
Tabelle4.Cells(Counter, 1).Value = Datu
For Column = 6 To 26 Step 1
If EinAus(Column) = 1 Then
If Not Div(Column) = 0 Then
Tabelle2.Cells(Counter, Column - 4).Value = Summe(Column) / Div(Column)
End If
End If
Next
Exit For
End If
'Sind die Kriterien in der Zeile, in der die Schleife nun ist equivalent zu den Kriterien im Kriterienbereich....
If (Tabelle1.Cells(Row, 3).Value = Tabelle4.Cells(96, 1).Value Or Tabelle4.Cells(96, 1).Value = "") And (Tabelle1.Cells(Row, 4).Value = Tabelle4.Cells(96, 2).Value Or Tabelle4.Cells(96, 2).Value = "") And (Tabelle1.Cells(Row, 5).Value = Tabelle4.Cells(96, 3).Value Or Tabelle4.Cells(96, 3).Value = "") Then
'...so fährt das Programm fort und überprüft anschließend, ob das Datum auch das gleiche ist.
If Tabelle1.Cells(Row, 2).Value = Datu Then
'Ist dies der Fall, so werden die Daten auf die in der Variable Summe gespeicherten Daten aufaddiert.
For Column = 6 To 26 Step 1
If EinAus(Column) = 1 Then
If Not Tabelle1.Cells(Row, Column).Value = "" And Not Tabelle1.Cells(Row, Column).Value = "-" Then
On Error GoTo weiter2
Summe(Column) = Summe(Column) + Tabelle1.Cells(Row, Column).Value
'Der Divisor wird um 1 erweitert.
Div(Column) = Div(Column) + 1
End If
weiter2:
End If
Next
'War das Datum nicht das selbe...
Else
'...so wird die Zeilenvariable Counter um den Wert 1 erweitert...
Counter = Counter + 1
'...Das Datum ins Berechnungsblatt geschrieben...
Tabelle4.Cells(Counter, 1).Value = Datu
'...gleich das nächste Datum aufgenommen...
Datu = Tabelle1.Cells(Row, 2).Value
'...die Daten werden ins Berechnungsblatt geschrieben, wobei die Werte der Summe durch die Werte von Div geteilt werden.
For Column = 6 To 26 Step 1
If EinAus(Column) = 1 Then
If Not Div(Column) = 0 Then
Tabelle4.Cells(Counter, Column - 4).Value = Summe(Column) / Div(Column)
Else
Tabelle4.Cells(Counter, Column - 4).Value = "-"
End If
'Die neuen Daten werden gleich eingelesen.
If Not Tabelle1.Cells(Row, Column).Value = "" Then
On Error GoTo asd
Summe(Column) = Tabelle1.Cells(Row, Column).Value
Div(Column) = 1
asd:
Else
'Sollte eine Leerzelle sein, so wird die Variable Summe auf Null gesetzt. Da die Variable Div
'ebenfalls auf Null gesetzt wird ist die möglich, denn ein Eintrag wird nur gesetzt, solange Div
'nicht Null ist.
Summe(Column) = 0
Div(Column) = 0
End If
End If
Next
End If
End If
Next
End if
End Sub

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem mit "On Error..."
14.12.2004 14:31:33
Jan
On Error Resume Next
Resume Next
15.12.2004 10:16:07
Jan
Sorry, hat mein Problem nicht gelöst, aber danke.
AW: Problem mit "On Error..."
14.12.2004 15:13:41
Thomas
du hattest : vergessen!!!
Also so
On Error GoTo asd:
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige