Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1204to1208
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
Inhaltsverzeichnis

VBA alles löschen am XDatum ;-) ?

VBA alles löschen am XDatum ;-) ?
Marcy
Hallo,
ist es möglich mit VBA einen Streich zu spielen?
Ich habe einem Kollegen eine recht umfangreiche (für meine Verhältnisse :-) ) Tabelle gemacht.
Diese wollte ich dem zum Test zuschicken, dass er mal etwas damit rum spielen kann.
Jetzt fände ich es recht lustig, wenn z.B. am Sonntag den 13.03.2011 (am besten noch um 20.11Uhr) alles in der Tabelle gelöscht wird.
Da es sich bei den Eingaben, nur um Tests handeln wird, wäre der Datenverlust egal.
Erst nach seinem Urlaub wird die Tabelle mit realen Firmendaten gefüllt.
Eine Meldung wie z.B. "so jetzt hast Du mal gesehen was man mit Excel machen kann, setzt Dich hin und lerne mit Begeisterung wie es geht. Gruß Marcy" würde die Sache abrunden.
Wäre doch ein schöner Spass oder nicht?
Gruß Marcy

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA alles löschen am XDatum ;-) ?
04.03.2011 12:45:37
Ralf_P

Private Sub Workbook_Open()
If Date = "13.03.2011" Then
Cells.Select
Selection.ClearContents
Range("A1").Select
ActiveWorkbook.Save
MsgBox "so jetzt hast Du mal gesehen was man mit Excel machen kann, setzt Dich hin und  _
lerne mit Begeisterung wie es geht. Gruß Marcy", vbOKOnly, "Testphase abgelaufen"
End If
End Sub

viel Spass
VG, Ralf
Löschen ab Datum - VBA
04.03.2011 13:13:36
Erich
Hi Ralf,
hast du deinen Code mal getestet?
If Date = "13.03.2011" Then
wird bnie eintreten. Date ist ein Datum (eine Zahl), "13.03.2011" ist dagegen ein Text.
Äpfel und Birnen sind immer verschieden.
Cells.Select
Selection.ClearContents
Muss man ALLE Zellen des (welches?) Blatts markieren, und sie zu löschen? Auch die leeren Zellen?
Worksheets(1).UsedRange.ClearContents
würde auch ausreichen - ohne Select.
Hier mein Vorschlag:

Private Sub Workbook_Open()
If Date >= DateValue("13.03.2011") Then
Worksheets(1).UsedRange.ClearContents
Me.Save
MsgBox "Jetzt hast Du mal gesehen, was man mit Excel machen kann." & _
vbLf & "Setz Dich hin und lerne mit Begeisterung, wie es geht!" & _
vbLf & "Gruß Marcy", vbOKOnly, "Testphase abgelaufen"
End If
End Sub
Ob das im Open-Ereignis richtig aufgehoben ist? Das müsste Marcy sagen.
Die Mappe muss ja um 20:11 Uhr nicht offen sein.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Löschen ab Datum - VBA
04.03.2011 13:46:34
Ralf_P
Hallo Erich,
ja, habe den Code mit dem heutigen Datum getestet und es hat funktioniert.
Äpfel und Birnen sind nicht immer verschieden ;-)
UsedRange würde ich nicht nehmen, da dort wegen Leerzellen nicht unbedingt der wirklich benutzte Bereich erfasst wird.
Muss man ALLE Zellen des (welches?) Blatts markieren?
Du weißt ja auch nicht, ob Blatt 1 das richtige ist.
Ob das im Open-Ereignis richtig aufgehoben ist?
Ein bisschen "Mitdenken" und "anpassen" setze ich von Marcy vorraus.
Trotzdem hast Du ja Recht, wenn man es ein wenig besser strukturiert.
VG, Ralf
Anzeige
Kleine Diskussion
04.03.2011 18:28:55
Erich
Hi Ralf,
ja, das klappt mit 'If Date = "13.03.2011" Then'
Hier werden nicht Äpfel direkt mit Birnen vergleichen. Um den logischen Ausdruck
Date = "13.03.2011"
auswerten zu können, konvertiert VBA den Funktionswert von Date (Variant/Date, also eine Zahl) in einen String,
um diesen dann mit dem String "13.03.2011" zu vergleichen (Zeichenfolgenvergleich).
(steht in der VBA-Hilfe zu Operatoren - Vergleichsoperatoren)
Auf dieses dünne Eis würde ich mich nicht begeben wollen. DateSerial(,,) oder DateValue sind allemal
besser. DateSerial(,,) klappt sicher auch bei international genutztem Code.
Den Satz
"UsedRange würde ich nicht nehmen, da dort wegen Leerzellen
nicht unbedingt der wirklich benutzte Bereich erfasst wird."
verstehe ich nicht. Meinst du, dass es beschriebene Zellen gibt, die mit UsedRange nicht erfasst werden?
Dass ein paar Leerzellen innerhalb des UsedRange noch mal geleert werden, sollte doch das Problem nicht sein.
Du hast schließlich ALLE Zellen des Blatts geleert.
Klar, welches Blatt betroffen sein soll (vielleicht ja mehrere), muss Marcy wissen.
Mit "Worksheets(1)." wollte ich nur darauf aufmerksam machen, dass man da mal kurz dran denken sollte.
Der Code steht in "DieseArbeitsmappe" - ohne Bezug zu einem Blatt. Er bearbeitet normalerweise
das gerade aktive Blatt. Aber es kann auch passieren, dass aktuell gar kein Worksheet aktiv ist.
Und dann?
Mit "Worksheets(1)." ist die Sache einfach klar.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Date = "13.03.2011"
04.03.2011 14:37:33
Rudi
Hallo Erich,
klappt, wenn der String so aufgebaut ist, wie von der Funktion Date zurückgegeben.
MsgBox date="04.03.2011" ist WAHR,
MsgBox date="4.3.2011" ist FALSCH.
Sicherer ist in jedem Fall
Date >= DateValue("13.03.2011")
oder
Date >= DateSerial(2011, 3, 13)
Gruß
Rudi
@Rudi
04.03.2011 18:31:44
Erich
Hi Rudi,
danke für die Aufklärung!
Noch etwas genauer formuliert:
"klappt, wenn der String so aufgebaut ist wie der String, in den der Funktionswert von Date konvertiert wird"
Grüße von Erich aus Kamp-Lintfort
@Erich
05.03.2011 20:11:32
Rudi
Hallo,
Noch etwas genauer formuliert:

Klugscheißer ;-)
Im Direktbereich ?Date ergibt 05.03.2011, keine Zahl, nix konvertiert. Andererseits ist Date natlürlich (MS-Logisch) ein Long.
Vielleicht sollten wir mal ein Bierchen oder Weinchen zusammen trinken, sind ja nicht weit auseinander.
Gruß
Rudi
Anzeige
@Rudi (OT)
05.03.2011 21:16:30
Erich
Hi Rudi,
ja - so bin ich... ;-)
Wo du dich so üblicherweise aufhältst, weiß ich gar nicht.
Du bist einer von wenigen, die ich noch nicht "enttarnt" habe.
Wie auch, bei deinem genialen Usernamen?
Also: Ich bin zu jeder Schandtat bereit: Retsina, Chianti, Trollinger, ...
Kann aber wohl frühestens nach dem nächsten Wochenende sein.
Schick mir doch bitte eine Mail.
Die Adresse kennst du vielleicht, ansonsten findest du mich hier auch in der Profilliste.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: @Erich
05.03.2011 22:10:12
Reinhard
Hallo Rudi,
sehr gute Idee, macht das mal :-)
Wenn dann nach den Retsinas der Kopf wieder klar ist könnt ihr mir ja erläutern wie ich nun als NichtsoFitter sowas deuten soll:
Im Direktbereich ?Date ergibt 05.03.2011, keine Zahl, nix konvertiert. Andererseits ist Date natlürlich (MS-Logisch) ein Long.
Das Excel Werte, die es als datum erkennt in der zelle als Long abspeichert weiß ich. Was es dann für die Zelle anzeigt ist was anderes, auch okay.
Welche bedeutung hat nun das Wissen, daß ?Date was auch immer ergibt.
Meiner eigenen Logik nach könnte da angezeigt werde;
Sowas kenne ich ich nicht.
Ist ein String.
Ist ein datumswert.
Gruß
Reinhard
Anzeige
@Rudi: Date
06.03.2011 11:57:49
Erich
Hi Rudi und Reinhard,
hier noch ein paar weitere Exkremente: ;-)
Aus der VBA-Hilfe:

Date-Funktion
Gibt einen Wert vom Typ Variant (Date) zurück, der das aktuelle Systemdatum enthält
Date 8 Bytes
Now-Funktion
Gibt einen Wert vom Typ Variant (Date) zurück, der das aktuelle Datum und die aktuelle Zeit
aus den Einstellungen für das Systemdatum und die Systemzeit auf Ihrem Computer angibt.
Date (Datentyp)
Ein Datentyp, der Datums- und Zeitangaben als reelle Zahlen speichert. Datumsvariablen
werden als 64-Bit-Zahlen (8 Bytes) gespeichert. Der Wert links vom Dezimalzeichen steht
für ein Datum, der Wert rechts vom Dezimalzeichen für eine Uhrzeit.
Date-Datentyp
Variablen vom Datentyp Date werden als 64-Bit-Gleitkommazahlen (8 Bytes) nach IEEE (wohl
IEEE 754) gespeichert und können ein Datum im Bereich vom 01. Januar 100 bis zum
31. Dezember 9999 und eine Uhrzeit im Bereich von 0:00:00 bis 23:59:59 speichern.
Jeder gültige Wert eines Datums- oder Zeitliterals kann einer Variablen vom Datentyp Date
zugewiesen werden. Ein Datumsliteral muß durch das Zeichen (#) eingeschlossen sein,
zum Beispiel: #January 1, 1993# oder #1 Jan 93#.
Variablen vom Datentyp Date verwenden zur Darstellung des Datums das auf dem Computer
eingestellte kurze Datumsformat. Zeitangaben werden mit dem auf dem Computer
eingestellten Zeitformat (entweder 12- oder 24-Stunden) dargestellt.
Beim Umwandeln anderer numerischer Datentypen in Werte des Datentyps Date
repräsentieren die Vorkommastellen das Datum und die Nachkommastellen die Uhrzeit.
Mitternacht entspricht dem Wert 0, und Mittag entspricht den Nachkommawert 0,5.
Negative ganze Zahlen repräsentieren ein Datum vor dem 30. Dezember 1899.
Und von mir:
Die Fkt. Date liefert ein Variant(Date), d. h. eine spezielle Double-Variable (kein Long).
Date ist wie Now. Der Unterschied ist lediglich, dass bei Date die Nachkommastellen 0 sind.
Für die Anzeige im Debugfenster bei ?Date wird NICHT der Double-Wert von Date angezeigt.
Debug.Print wandelt den Wert um in "das auf dem Computer eingestellte kurze Datumsformat"
und damit einen String. (Das tut es auch mit dem Wert einer Variablen vom Typ Date.)
Lass dir mal im Direktfenster ?CDate(0.354) anzeigen. Dann haben wir plötzlich eine Uhrzeit...
Man kann auch leicht das hier prüfen lassen:
MsgBox Date > 40607.123
MsgBox Date > 40607
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: VBA alles löschen am XDatum ;-) ?
05.03.2011 12:45:41
Marcy
Hallo zusammen,
sorry für die späte Rückmeldung, hätte nicht gedacht, dass so schnell ein Antwort darauf kommt.
War deswegen ausgelassen Karneval feiern :-)
Jetzt zu den Fragen.
Es kann alles gelöscht werden, einfach alle Tabellenblätter weg!
Falls ein Tabellenblatt für die Meldung
"so jetzt hast Du mal gesehen was man mit Excel machen kann, setzt Dich hin und lerne mit Begeisterung wie es geht. Gruß Marcy"
stehen bleiben muss, sollte dieses Tabellenblatt leer sein.
Die Ergänzung "Testphase abgelaufen" finde ich gut.
Ob es funktioniert, muss ich später prüfen, muss jetzt erst mal das Wetter ausnutzen.
Trotzdem schon mal danke.
Gruß Marcy
Anzeige
kleine Erweiterungen
05.03.2011 19:03:04
Erich
Hi Marcy,
hier ein paar kleine Erweiterungen:

Private Sub Workbook_Open()
Dim ii As Long
If Date >= DateValue("03.03.2011") + TimeValue("10:30:00") Then
Application.DisplayAlerts = False
For ii = Worksheets.Count To 2 Step -1
Worksheets(1).Delete
Next ii
Worksheets(1).UsedRange.ClearContents
Me.Save
MsgBox "Jetzt hast Du mal gesehen, was man mit Excel machen kann." & _
vbLf & "Setz Dich hin und lerne mit Begeisterung, wie es geht!" & _
vbLf & "Gruß Marcy", vbOKOnly, "Testphase abgelaufen"
Application.DisplayAlerts = True
End If
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: kleine Erweiterungen
07.03.2011 11:33:51
Marcy
Hallo Erich, hallo alle,
Erichs Version habe ich gestern am 06.03. getestet.
Das Datum in 06.03.2011 und die Uhrzeit in 20.30 Uhr geändert.
Habe diese Test Mappe, drei mal gespeichert. 2x vor dieser Uhrzeit geöffnet, 1x Makros aktivieren, 1x deaktivieren.
Um 20.30Uhr passierte nichts.
Jetzt habe ich die Mappen erneut geöffnet, bei der Version Makros aktivieren ist tatsächlich alles weg.
Prima, vielen dank dafür.
Jetzt kommt mir aber eine Idee.
Bald ist der 1. April, Zeit für Aprilscherze.
Wie wäres damit?
- lösche am 01.04.2011
- Fenster, Meldung "April, April, die Einträge sind gelöscht"
- Meldung "Passwort eingeben, dann sind die Einträge wieder da"
- Nach Eingabe des Passwort ist die Liste wieder ok.
Der Schock wäre größer für mein Kollegen, da die Liste dann schon einige Einträge hat.
Da der Kollege keine Möglichkeit auslässt, einen Spass mit Kollegen zu machen, tät ihm der Schock mal ganz gut :-)
Ansonsten bin ich auch schon mit Erich´s Version zufrieden, was ich dann allerdings nur in der TestVersion einbauen werde. Will dem Kollegen ja nur ein Schock einjagen.
Alaaaaaf Marcy
Anzeige

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige