Hallo!
Ich habe folgenden Code (siehe unten: bestehender Code)in einer Excel 2003-Datei. Diesen habe ich einer Schaltfläche zugewiesen. In dieses Makro möchte ich noch eine weitere Aktion einbauen. Und zwar sollen bestimmte Daten aus bestimmten Zellen gelöscht werden. Dazu habe ich folgenden Codeschnipsel gebastelt, der erstmal eine Message-Box öffnet. Nur weiß ich nicht, wie ich den in das schon bestehende Makro einarbeiten muss. Da alles über die eine Schaltfläche ausgelöst werden soll.
Makro für Daten löschen: (erstmal nur die Message-Box, Makro damit Daten gelöscht werden, fehlt mir noch)
Private Sub cmd_löschen_Click()
Dim ans As VbMsgBoxResult
Dim sql As String
ans = MsgBox(„Dieser Vorgang löscht alle Plan-Daten“ & Chr(13) & _
„Fortsetzen?“, vbYesNo + vbExclamation + vbDefaultButton2, „Löschen von Daten“)
End Sub
Schon bestehendes Makro:
Option Explicit
’
Sub tt()
Dim strEing As String, Blatt As Worksheet, M As Integer
Do
strEing = InputBox(„Geben Sie einen Dateinamen ein“, „Kopie speichern als…“, _
ThisWorkbook.Name)
If strEing = „“ Then Exit Sub
Loop While strEing = ThisWorkbook.Name
ThisWorkbook.Save
ThisWorkbook.SaveAs ThisWorkbook.Path & „“ & strEing
For Each Blatt In ThisWorkbook.Worksheets
If Len(Blatt.Name) = 6 Then
For M = 1 To 12
If Left(Blatt.Name, 3) = MonthName(M, True) Then
If Mid(Blatt.Name, 4, 1) = " " Then
If IsNumeric(Right(Blatt.Name, 2)) Then
Blatt.Name = Left(Blatt.Name, 4) & Right(„00“ & CStr(CInt(Right(Blatt.Name, 2)) + 1), 2)
Blatt.Range(„C1“) = „20“ & Right(Blatt.Name, 2)
Exit For
End If
End If
End If
Next M
End If
Next Blatt
End Sub
Vielen Dank.
Hallo Doreen,
bitte benutze doch das Tag, damit Dein Code lesbarer wird. Übrigens lustiger Code, um das Jahr in den Blätternamen um eins nach oben zu zählen …
Next M
End If
Next Blatt
' Hier muss Dein Aufruf rein
End Sub
Bitte vergiss nicht den Namen der Routine cmd_löschen_Click umzubenennen, da sonst bei jenden Klick auf dem Button cmd_löschen das Makro ebenfalls gestartet wird.
MfG Georg V.
Hallo Georg,
bitte benutze doch das Tag, damit Dein Code
lesbarer wird.
Jepp.
Übrigens lustiger Code, um das Jahr in den
Blätternamen um eins nach oben zu zählen …
Was genau gefällt dir an meinem Code nicht?
Bitte vergiss nicht den Namen der Routine cmd_löschen_Click
umzubenennen, da sonst bei jenden Klick auf dem Button
cmd_löschen das Makro ebenfalls gestartet wird.
? Bei Klick auf den Button „cmd_löschen“ wird dieses durchlaufen:
Private Sub cmd_löschen_Click()
Dim ans As VbMsgBoxResult
Dim sql As String
ans = MsgBox(„Dieser Vorgang löscht alle Plan-Daten“ & Chr(13) & _
„Fortsetzen?“, vbYesNo + vbExclamation + vbDefaultButton2, „Löschen von Daten“)
End Sub
und da wird kein Makro ebenfalls gestartet!? Erklär mal bitte was du damit meinst.
Gruß
Reinhard
Hallo Doreen,
Hallo Reinhard,
Was genau gefällt dir an meinem Code nicht?
Reinhard> Ähm, das ist erstmal Doreen’s Code, auch wenn Sie es wenn von einen der(!) WWW-Experten haben sollte. Typischer Code halt, wenn nicht genügend Hintergrund Informationen hat. Es würde z.B. auch reichen, das (alte und/oder neue) Jahr abzufragen und 12 gezielte Umbenennungen vorzunehmen.
? Bei Klick auf den Button „cmd_löschen“ wird dieses
durchlaufen:
Reinhard> Ich kann Code lesen (und verstehen)
!
Dies war nur der (warn-)Hinweis, dass man in einer Testsituation gerne auch ein separaten Testeinstieg verwenden sollte, aber man sich im Klaren sein sollte, wofür man dieses Feature braucht.
Sich im Dezember alle wesentlichen (Einstell-)Daten des Jahres löschen und damit ggf. das Excel-Sheet unbrauchbar zu machen, nur weil man (zu früh) auf den Testbutton gekommen ist und alle Warnungen in geistiger Übernachtung ignoriert, macht definitiv keinen Spass!
Also lieber das Makro in „alles_wichtige_am_Jahresanfang_loeschen“ (nein, ich habe jetzt nicht getestet ober der String von der Länge her akzeptiert wird) und -wenn der Button noch benötigt wird- in der cmd_löschen_Click diese Routine ebenfalls gezielt aufrufen.
Private Sub cmd\_löschen\_Click()
call alles\_wichtige\_am\_Jahresanfang\_loeschen
End Sub
MfG Georg V.
Hallo Georg,
Hallo Reinhard,
Was ist bitte ein Tag? ;-(
Muss ich das so wie Du hier vor und hinter meinen Code schreiben?
Next M
End If
Next Blatt
’ Hier muss Dein Aufruf rein
End Sub
Bitte vergiss nicht den Namen der Routine cmd_löschen_Click
umzubenennen, da sonst bei jenden Klick auf dem Button
cmd_löschen das Makro ebenfalls gestartet wird.
Das verstehe ich nicht richtig.
Ich habe eine Schaltfläche, die den Code zugwiesen hat, das sich bei Abspeichern der Datei in eine neue Datei, die Jahreszahlen in 12 weiteren Tabellenblätter ändert. Wenn ich diesen Button drücke, sollen gleichzeitig auch Daten aus einem anderen Tabellenblatt (das Übersicht heißt und wo sich der Button befindet), herausgelöscht werden. Und zwar von Zelle (C18 bis C19, C22-C23, E18-E19, E22-E23, usw.) Zwischenzeitlich werde ich noch durch eine Message Box gefragt, ob ich die Daten wirklich löschen will.
Könnt ihr mir das bitte nochmal erklären???
Vielen DAnk.
LG Doreen
Hallo Georg,
Was genau gefällt dir an meinem Code nicht?
Reinhard> Ähm, das ist erstmal Doreen’s Code, auch wenn Sie
es wenn von einen der(!) WWW-Experten haben sollte. Typischer
Code halt, wenn nicht genügend Hintergrund Informationen hat.
Es würde z.B. auch reichen, das (alte und/oder neue) Jahr
abzufragen und 12 gezielte Umbenennungen vorzunehmen.
das ist richtig, um den Code kürzer zu gestalten fehlten Details zur genauen Blattnamenstruktur.
? Bei Klick auf den Button „cmd_löschen“ wird dieses
durchlaufen:
Reinhard> Ich kann Code lesen (und verstehen)
!
Dies war nur der (warn-)Hinweis, dass man in einer
Testsituation gerne auch ein separaten Testeinstieg verwenden
sollte, aber man sich im Klaren sein sollte, wofür man dieses
Feature braucht.
So ganz klar ist mir immer noch nicht was du meinst. Sicher, man könnte anstatt einer Sicherheitsabfrage drei einbauen, das nützt letztlich auch nix, wenn jmd. löschen will dann löscht er.
Gruß
Reinhard
Hallo Reinhard,
ich habe jetzt den Code zum Löschen von Zellinhaltn verwendet:
ActiveSheet.Range("C18:C19").Clear
ActiveSheet.Range("C22:C23").Clear
ActiveSheet.Range("C26:C27").Clear
ActiveSheet.Range("C30:C31").Clear
ActiveSheet.Range("C34:C35").Clear
ActiveSheet.Range("C38:C39").Clear
ActiveSheet.Range("C42:C43").Clear
usw.
Aber damit löscht er mir auch meine Formatierung mit weg.
Welchen Code könntest Du empfehlen, der nur den Zellinhalt löscht?
vielen Dank. LG Doreen
ich habe jetzt den Code zum Löschen von Zellinhaltn verwendet:
ActiveSheet.Range(„C18:C19“).Clear
Aber damit löscht er mir auch meine Formatierung mit weg.
Welchen Code könntest Du empfehlen, der nur den Zellinhalt
löscht?
Hi Doreen,
vielleicht so:
Option Explicit
'
Sub tt()
Dim N As Integer
For N = 18 To 42 Step 4
Range(Cells(N, 3), Cells(N + 1, 3)).ClearContents
Next N
End Sub
Gruß
Reinhard
Danke, Reinhard, mit „ClearContents“ konnte ich was anfangen.
Eine letzte Frage:
In meinem ersten Tabellenblatt „Übersicht“ habe ich einen Button,
der Zellinhalte aus den folgenden 12 Tabellenblättern von B5 bis AY27 löschen soll. Aber irgendwas ist an folgendem Code nicht richtig.
Fehler: Variable nicht definiert.
'Ist-Daten löschen
Sub cmd\_istlöschen\_Click()
Dim Blatt As Worksheet
Dim ans As VbMsgBoxResult
ans = MsgBox("Dieser Vorgang löscht alle Ist-Daten." & Chr(13) & \_
"Fortsetzen?", vbYesNo + vbExclamation + vbDefaultButton2, "Löschen von Daten")
If ans = 6 Then
For Each Blatt In ThisWorkbook.Worksheets
Worksheet.Range("B5:AY27").ClearContent
MsgBox "Löschvorgang erfolgreich abgeschlossen!", vbOKOnly + vbInformation, "Löschen von Daten"
Next Blatt
End If
End Sub
LG Doreen
Hi Doreen,
Danke, Reinhard, mit „ClearContents“ konnte ich was anfangen.
dann benutze es auch, in deinem Code fehlt hinten das s bei ClearContent.
Und wo ist deine pre-Tag-Benutzung hin? *seufz*
Gruß
Reinhard
Hallo Doreen,
dann benutze es auch, in deinem Code fehlt hinten das s bei
ClearContent.
Das funktioniert trotzdem nicht. Er sagt die Variable Worksheet nicht definiert?!? -> „Worksheet.Range(„B5:AY27“).ClearContents“
Achja, hatte ich vergessen beim Rummosern, bitte sag immer genau welche Fehlermeldung kommt und in welcher Codezeile der Debugger etwas gelb markiert 
Auch da fehlt ein s, es heisst worksheetS
Und wo ist deine pre-Tag-Benutzung hin? *seufz*
keiner hat mir verraten, was das ist?!?
Tue mal so als ob du auf meinen beitrag antworten willst, dann siehst du unterhalb des Eingabefeldes die Erklärungen zu den Tags.
Gruß
Reinhard
Danke für Deine Geduld.
neuer Fehler in der 8. Code-Zeile, Range -> Methode oder Datenobjekt nicht gefunden
'Ist-Daten löschen
Sub cmd\_istlöschen\_Click()
Dim Blatt As Worksheet
Dim ans As VbMsgBoxResult
ans = MsgBox("Dieser Vorgang löscht alle Ist-Daten." & Chr(13) & \_
"Fortsetzen?", vbYesNo + vbExclamation + vbDefaultButton2, "Löschen von Daten")
If ans = 6 Then
For Each Blatt In ThisWorkbook.Worksheets
Worksheets.Range("b5:AY27").ClearContents
MsgBox "Löschvorgang erfolgreich abgeschlossen!", vbOKOnly + vbInformation, "Löschen von Daten"
Next Blatt
End If
End Sub
Ich will aber noch ein zusätl. Tabellenblatt einfügen,welches nicht über den COde laufen soll. Das soll heißen: Anwendungshilfe und steht als 1. Tabellenblatt in der Datei. Wie kann ich das ausschließen?
LG
Hallo Doreen,
in Deinem vorhandenen Makro kann man ein mögliches Vorgehen doch sehr gut sehen:
'Ist-Daten löschen
Sub cmd\_istlöschen\_Click()
Dim Blatt As Worksheet
Dim ans As VbMsgBoxResult
ans = MsgBox("Dieser Vorgang löscht alle Ist-Daten." & Chr(13)& \_
"Fortsetzen?", vbYesNo + vbExclamation + vbDefaultButton2,Löschen von Daten")
If ans = 6 Then
For Each Blatt In ThisWorkbook.Worksheets
If Blatt.Name "Anwendungshilfe" then
Worksheets.Range("b5:AY27").ClearContents
End If
MsgBox "Löschvorgang erfolgreich abgeschlossen!", vbOKOnly + vbInformation, "Löschen von Daten"
Next Blatt
End If
End Sub
MfG Georg V.
Hallo Georg
Danke für die Abänderung des Makros.
Leider kommt trotzdem die Fehlermeldung: Fehler beim Kompilieren,
Methode oder Datenobjekt nicht gefunden. Und in der 11. Codezeile wird der Punkt und Range, nach Worksheets, markiert. Was bedeuted das?
'Ist-Daten löschen
Sub cmd_istlöschen_Click()
Dim Blatt As Worksheet
Dim ans As VbMsgBoxResult
ans = MsgBox(„Dieser Vorgang löscht alle Ist-Daten.“ &
Chr(13)& _
„Fortsetzen?“, vbYesNo + vbExclamation +
vbDefaultButton2,Löschen von Daten")
If ans = 6 Then
For Each Blatt In ThisWorkbook.Worksheets
If Blatt.Name „Anwendungshilfe“ then
Worksheets.Range(„b5:AY27“).ClearContents
End If
MsgBox „Löschvorgang erfolgreich abgeschlossen!“,
vbOKOnly + vbInformation, „Löschen von Daten“
Next Blatt
End If
End Sub
LG Doreen
Leider kommt trotzdem die Fehlermeldung: Fehler beim
Kompilieren,
Methode oder Datenobjekt nicht gefunden. Und in der 11.
Codezeile wird der Punkt und Range, nach Worksheets, markiert.
Was bedeuteT das?
Hi Doreen,
Tausche mal bitte
Worksheets.Range(„b5:AY27“).ClearContents
gegen
Blatt.Range(„b5:AY27“).ClearContents
aus.
Gruß
Reinhard
'Ist-Daten löschen
Sub cmd_istlöschen_Click()
Dim Blatt As Worksheet
Dim ans As VbMsgBoxResult
ans = MsgBox(„Dieser Vorgang löscht alle Ist-Daten.“ &
Chr(13)& _
„Fortsetzen?“, vbYesNo + vbExclamation +
vbDefaultButton2,Löschen von Daten")
If ans = 6 Then
For Each Blatt In ThisWorkbook.Worksheets
If Blatt.Name „Anwendungshilfe“ then
Worksheets.Range(„b5:AY27“).ClearContents
End If
MsgBox „Löschvorgang erfolgreich abgeschlossen!“,
vbOKOnly + vbInformation, „Löschen von Daten“
Next Blatt
End If
End Sub
LG Doreen