PDA

Vollständige Version anzeigen : Case Select funktioniert nicht richtig


Monty Burns
12.03.2009, 00:12
Hallo

Ich habe ein Makro, daß Samstage und Sonntage ermittelt und die dazugehörige Zeile auf ein anderes Tabellenblatt kopieren soll.
Als Beispiel habe ich in die Tabelle 1, Spalte A das Datum von heute bis zum 30. gezogen. Daraus ergeben sich 3 Wochenenden, also 6 Zeilen, die kopiert werden sollten. Es wird aber nur die Zeile vom 28.3.2009 kopiert.
Mit Debug.Print habe ich bereits die Zählvariablen abgeklopft: Es werden die maximal vorhandenen Werte in Spalte ermittelt und ebenso die Erste leere Zeile im Blatt, in welches die Daten kopiert werden sollen.

Warum werden nicht alle Funde kopiert?

Sub WochentagErmitteln()

Dim zeile As Long
Dim zeilemax As Long
Dim ersteleerezeile As Long

zeilemax = Workbooks("Mappe1").Worksheets("1").UsedRange.Rows.Count
ersteleerezeile = Workbooks("Mappe1").Worksheets("Reisekosten").Cells(Rows.Count, "A").End(xlUp).Row + 1

For zeile = 1 To zeilemax
Select Case Weekday(Worksheets("1").Range("A" & zeile).Value, vbMonday)
'Case 1: Debug.Print "Heute ist Montag"

'Case 2: Debug.Print "Heute ist Dienstag"

'Case 3: Debug.Print "Heute ist Mittwoch"

'Case 4: Debug.Print "Heute ist Donnerstag"

'Case 5: Debug.Print "Heute ist Freitag"
Case 6: Worksheets("Reisekosten").Cells(ersteleerezeile, 1).Value = Worksheets("1").Cells(zeile, 1).Value
Worksheets("Reisekosten").Cells(ersteleerezeile, 2).Value = Worksheets("1").Cells(zeile, 3).Value
Worksheets("Reisekosten").Cells(ersteleerezeile, 3).Value = Worksheets("1").Cells(zeile, 4).Value
'Worksheets("1").Range("A" & zeile & ":D" & zeile).ClearContents
Case 7: Worksheets("Reisekosten").Cells(ersteleerezeile, 1).Value = Worksheets("1").Cells(zeile, 1).Value
Worksheets("Reisekosten").Cells(ersteleerezeile, 2).Value = Worksheets("1").Cells(zeile, 3).Value
Worksheets("Reisekosten").Cells(ersteleerezeile, 3).Value = Worksheets("1").Cells(zeile, 4).Value
'Worksheets("1").Range("A" & zeile & ":D" & zeile).ClearContents
End Select
Next zeile
End Sub

IngGi
12.03.2009, 00:38
Hallo Monty,

es werden schon alle Zeilen kopiert, aber die Kopien überschreiben sich, so dass am Ende nur die letzte kopierte Zeile übrigbleibt. Die Variable ersteleerezeile muss vor jedem Schleifendurchlauf neu initiiert werden. Das wird sie aber nur, wenn du sie in die For...Next-Schleife integrierst. So wie du es im Moment hast, wird die Variable nur einmal gesetzt, bleibt daher immer gleich und die Kopie wird immer in die gleiche Zeile geschrieben, wo sie die vorangehende Kopie überschreibt.

Gruß Ingolf

Monty Burns
12.03.2009, 00:50
Hallo Ingolf

Vielen Dank für die Antwort!...hab´ich in meinem jugendliche Leichtsinn wieder mal was überseh´n...

Gruß

- Monty Burns -