AW: Do While Schleife funktioniert nicht
14.05.2014 09:17:21
Daniel
Hi
zunächst einmal solltest du ausführlicher beschreiben, was "funktioniert nicht" bedeutet:
Gibts ne Fehlermeldung?
Wenn ja: Welche? In welcher Zeile tritt sie auf?, welche Werte haben die Variablen und verwendeten Zellen wenn der Fehler auftritt?
Wenn nein: Was sollte deinem Wunsch nach passieren und was passiert tatsächlich?
kleiner Tip noch:
lass diese pauschalen "On Error Goto Sprungmarke" in den Codes, weg, solange sich der Code noch in der Entwicklungs- oder Erprobungsphase befindet.
diese Fehlersprünge zum Programmende vernichten wichtige Hinweise, die du für eine schnelle Ursachenfindung und Fehlerbehebung benötigst (in welcher Zeile passiert, der Fehler, welche Werte haben die Variablen)
Die Fehlerbehandlungsroutinen kannst du dann einbauen, wenn der Code fertig getestet ist und fehlerfrei läuft.
Wenn im Reglulären Betrieb Fehlerabbrüche auftauchen können, dies aber nicht weiter schlimm ist und das Programm trotzdem weiterlaufen kann (in deinem Fall wäre dass, wenn nicht immer alle der benannten Tabellenblätter vorhanden sind), dann kapselt man diese einzelnen Zeilen in ein On Error Resume Next - On Error Goto 0, damit dann diese einzelne Zeile vom Fehlerabbruch ausgenommen ist.
Was auf den ersten Blick so auffällt:
du verwendest Funktionnamen und Variablenbezeichnungen, die VBA ebenfalls für eigene Funktionen verwendt (Sheet, Clear, Count), sowas kann funktionieren, es kann aber auch zu Verwechslungen und damit zu Problemen führen.
Sicherer ist hier, wirklich eindeutige Variablen- und Funktions- oder Sub-Benennungen zu verwenden, bspw durch die Verwendung von deutschen Namen (VBA spricht englisch), oder durch bestimmte Prä- oder Postfixe.
Beispiel:
Function "clear" -> "funcBlattinhalteLöschen"
Variable "sheet" -> "strMySheet" ("str" weil es sich um eine String-Variable handelt, "My", weil es eine von dir erstellte Variable ist)
noch ein Fehler: das "+" ist das Zeichen für die Addition, für das Verketten von Texten ist das "&" vorgesehen, man kann zwar "+" auch für das Verketten verwenden, allerdings Entscheidet hier Excel aufgrund der verwendeten Variablen, ob Verkettet oder Addiert wird. Besser ist daher, fürs Verketten das "&" zu verwenden.
ein richtiger Fehler ist, dass du die Zellen vor der Bearbeitung selektierst, aber nicht das Tabellenblatt vorher aktiverst.
Zellen selektieren kann man immer nur auf dem gerade aktiven Tabellenblatt, versucht du Zellen auf einem nichtaktiven Tabellenblatt zu aktivieren, dann gibts nen Fehler.
das Selektieren ist aber nicht notwendig:
Public Function clear(ByVal count As String)
on Error Resume next
With Worksheets("Tabelle_" + count + "_D")
.Range(.Range("A2:D2"), .Range("A2:D2").End(xlDown)).ClearContents
End With
On Error Goto 0
End Function
da jetzt deine unterfunktion nur aus einer einzigen effektiven Programmzeile besteht, stellt sich die Frage, obs nicht sinnvoller und übersichtlicher ist, diese in das Hauptmakro zu integrieren:
Public Sub clearData()
Dim myCount As Long
For myCount = 1 To 8
on Error Resume next
With Worksheets("Tabelle_" & myCount & "_D")
.Range(.Range("A2:D2"), .Range("A2:D2").End(xlDown)).ClearContents
End With
On Error Goto 0
Next myCount
End Sub
Gruß Daniel