04.04.2015, 17:45
(Dieser Beitrag wurde zuletzt bearbeitet: 04.04.2015, 17:48 von Hardilein.
Bearbeitungsgrund: Neue Erkenntnisse: Wird wohl am "On Error" liegen. Steht das falsch, wie sollte ich es setzen?
)
Hallo
Ich habe ein Problem mit mehrmals durchlaufendem Code. Ich hätte es wahrscheinlich nicht gleich gemerkt, wenn ich nicht die Error-Abfrage drin hätte. Er fängt nach dem Löschen der Zeilen wieder oben an. Hat dann ein Target.Count von xxx, bei Abfrage des Target.Count springt er statt mit "Goto Ende" runter nun zu If Not IsEmpty(, also 2 Zeilen übersprungen. Springt dann wieder hoch zu Range("C" & datezeile & ":H" & datezeile) = "". Ich sehe hier nicht mehr durch.
Der soll einmal durchlaufen und alles machen was da steht - dachte ich.
Ich danke schon mal für hilfreiche Ratschläge.
Ich habe ein Problem mit mehrmals durchlaufendem Code. Ich hätte es wahrscheinlich nicht gleich gemerkt, wenn ich nicht die Error-Abfrage drin hätte. Er fängt nach dem Löschen der Zeilen wieder oben an. Hat dann ein Target.Count von xxx, bei Abfrage des Target.Count springt er statt mit "Goto Ende" runter nun zu If Not IsEmpty(, also 2 Zeilen übersprungen. Springt dann wieder hoch zu Range("C" & datezeile & ":H" & datezeile) = "". Ich sehe hier nicht mehr durch.
Der soll einmal durchlaufen und alles machen was da steht - dachte ich.
Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Wochentage, datezeile, Endzeile
Dim Feld As Range
'Application.ScreenUpdating = False
ActiveSheet.Unprotect
On Error GoTo Ende
MsgBox Target.Row & vbLf & Target.Column & vbLf & Target.Count
If Target.Row <> 2 Or Target.Column <> 5 orTarget.Count <> 1 Then GoTo Ende
datezeile = Application.Match("Datum", Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row), 0)
If datezeile > 9 Then Rows("6:" & datezeile - 4).Delete 'Löschen der Zeilen
If Not IsEmpty(Cells(2, 5)) Then
datezeile = Application.Match("Datum", Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row), 0)
MsgBox "bin drin"
Range("C" & datezeile & ":H" & datezeile) = ""
Range("C" & datezeile & ":H" & datezeile).Borders(xlInsideVertical).LineStyle = xlNone
Wochentage = Application.Match(CLng(CDate(Mid$(Cells(2, 7), 8))), Worksheets("Tagesdaten").Range("A:A"), 1) _
- Application.Match(Cells(2, 5), Worksheets("Tagesdaten").Range("A:A"), 0) + 1
Endzeile = 6 + Wochentage - 1
Rows("6:" & Endzeile).Insert
Range("A6:A" & Endzeile).NumberFormat = "d/;;;"
Range("B6:B" & Endzeile & ",G6:G" & Endzeile & ",C6:C" & Endzeile & ",J6:J" & Endzeile).NumberFormat = "General"
Range("D6:D" & Endzeile & ",E6:E" & Endzeile).NumberFormat = "0.00;;;"
Range("F6:F" & Endzeile).NumberFormat = "[>10]\*\*0.00;[>0]0.00;;"
Range("H6:H" & Endzeile & ",I6:I" & Endzeile).NumberFormat = "0.00;0;;@"
Set Feld = Range("A6:J" & Endzeile)
Feld.Font.Bold = False
With Feld.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Feld.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Feld.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Feld.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Feld.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Feld.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Range("A6:A" & Endzeile).FormatConditions.Delete
Range("A6:A" & Endzeile).FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=$A5"
Range("A6:A" & Endzeile).FormatConditions(1).Font.ColorIndex = 2
Range("A6:A" & Endzeile).FormulaLocal = "=blabla"
Range("B6:B" & Endzeile).FormulaR1C1 = "=blabla"
Range("C6:C" & Endzeile).FormulaLocal = "=blabla"
Range("D6:D" & Endzeile).FormulaR1C1 = "=blabla"
Range("E6:E" & Endzeile).FormulaR1C1 = "=blabla"
Range("F6:F" & Endzeile).FormulaR1C1 = "blabla"
Range("G6:G" & Endzeile).FormulaR1C1 = "=blabla"
Range("H6:H" & Endzeile).FormulaR1C1 = "=blabla"
Range("I6:I" & Endzeile).FormulaR1C1 = "blabla"
Range("J6:J" & Endzeile).FormulaLocal = "blabla"
End If
Cells(2, 5).Select
Ende:
If Err.Number > 0 Then MsgBox "Fehler. Evtl. Tag nicht in den Tagesdaten gefunden?!" & Chr(10) & _
"Wenn man´s genau nimmt:" & Chr(10) & Err.Number & vbLf & Err.Description, vbExclamation, "Fehler"
'ActiveSheet.Protect
Application.ScreenUpdating = True
End Sub
Ich danke schon mal für hilfreiche Ratschläge.