Mit Macro Datum 00.01.1900 löschen

Bild

Betrifft: Mit Macro Datum 00.01.1900 löschen
von: Arnold
Geschrieben am: 05.05.2015 16:22:09

https://www.herber.de/bbs/user/97475.xlsx
Hallo zusammen
Ich habe einen Exceldownload aus unserem SharePoint. Damit diese Daten "sauber" durch das Makro laufen, habe ich ein Tabellenblatt "Bastel-File" in welchem ich schon viele der Werte mittels Formeln richtig stellen kann.
In den Datums-Spalten (I & J) werden im SharePoint zum Teil keine Datum angegeben, sprich diese Werte sind leer (Zelle blanc). Die leeren Datumsfelder werden mir im Bastel-File mit dem Wert 00.01.1900 ausgegeben. Ich habe mit verschiedensten Formatierungen (*13.01.2001, oder Benutzerdefiniert TT,MM,YYYY;@, Werte in eine andere Spalte schreiben und mittels Werte einfügen wieder zurück, etc.).
Das komisch ist, wenn ich manuell mittels der Excelfunktion die Werte 00.01.1900 mit "" ersetze, also lösche, funktioniert es.
Wenn ich das im Makrorecorder aufzeichne und das dann einbaue, funktioniert das wieder nüscht.
Vielen Dank für eure Mithilfe und nen Tipp wo ich mir selber auf dem Schlauch stehe.
Arnold
'Blendet Tabellenblatt ein
Sheets("Bastel-File").Visible = True

'Variablen deklarieren
Sheets("Bastel-File").Select
Range("A2:AD2").Select
Selection.AutoFill Destination:=Range("A2:AD1500"), Type:=xlFillDefault
Range("A2:AD1500").Select

'Formeln werden gelöscht
Range("A3:AE1500").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

'Zeile 2 wird mittels Werte einfügen kopiert, damit die Formel nicht gelöscht wird
Rows("2:2").Select
Selection.Copy
Rows("3:3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

'Datumswert 00.01.1900 wird gelöscht
Range("I3:J1500").Select
Cells.Replace What:="00.01.1900", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
'End With

Bild

Betrifft: AW: Mit Macro Datum 00.01.1900 löschen
von: Daniel
Geschrieben am: 05.05.2015 16:33:31
Hi
Excel und VBA sind bei Datumswerten etwas kritisch.
Formatiere den Zellbereich mit dem Zahlenformat "Standard" und Ersetze dann alle 0 durch nichts mit LookAt:=xlwhole.
Dannach kannst du dann wieder die Zellen mit einem Datums-Zahlenformat formatieren.
Btw es ist unnütz, wenn du erst die Zellen im Bereich I3:J1500 selektierst und dann das Replace auf das ganze Blatt anwendest (Cells.replace).
Lass das mit dem Select Weg und gib gleich vor dem Replace den Bereich an, den du damit bearbeiten willst:

Range("I3:J1500").Numberformat = "General"
Range("I3:J1500").Replace 0, "", lookat:=xlwhole
Range("I3:J1500").Numberformat = "DD.MM.YYYY"
Gruß Daniel

Bild

Betrifft: AW: Mit Macro Datum 00.01.1900 löschen
von: Arnold
Geschrieben am: 05.05.2015 16:38:22
Hallo Daniel
Wow, super. Das klappt.
Vielen Dank für deinen Super Tipp.
Einen schönen Nachmittag
Arnold

Bild

Betrifft: AW: Mit Macro Datum 00.01.1900 löschen
von: Nepumuk
Geschrieben am: 05.05.2015 16:44:00
Hallo,
ich würde die Zeile:
Range("I3:J1500").Replace 0, "", lookat:=xlwhole
so ändern:
Range("I3:J1500").Replace 0, Empty, LookAt:=xlWhole
Mit "" enthält die Zelle einen leeren String und ist nicht leer (Empty). Das kann bei manchen Funktionen das Ergebnis verfälschen.
Gruß
Nepumuk

Bild

Betrifft: AW: Mit Macro Datum 00.01.1900 löschen
von: Daniel
Geschrieben am: 05.05.2015 17:02:04
Hi
Replace ist wie eine Neueingabe des Zellinhaltes und dabei wird erneut überprüft, ob die eingegebene Zeichenfolge eine Leerzelle, eine Zahl, ein Datum, eine Formel oder einen Text darstellt.
Dabei wird dann die Zeichenfolge "" in eine echte Leerzelle gewandelt.
Dh es ist nicht möglich, mit Replace eine Zelle zu erzeugen die den Text "Leerstring" enthält.
Diese Automatsische Prüfung und Umwandlung des Zellinhaltes findet statt bei Replace und bei .Formula = .Value.
Sie findet nicht statt bei .Copy/.PasteSpeical xlpastevalues
Gruß Daniel

Bild

Betrifft: AW: Mit Macro Datum 00.01.1900 löschen
von: Nepumuk
Geschrieben am: 05.05.2015 17:09:53
Hallo Daniel,
hab's soeben getestet, und du hast Recht. Die Abfrage auf IsEmpty liefert tatsächlich True zurück.
Gruß
Nepumuk

Bild

Betrifft: Das ist zwar richtig, weil so gewollt und ...
von: Luc:-?
Geschrieben am: 05.05.2015 19:45:41
…sinnvoll, Daniel,
aber man kann auch mit Replace einen Leer-String erzeugen. Dazu muss man dann allerdings entweder ein TextPräfix in die Zelle einfügen oder die reine Zell­Löschung ander­weitig verhindern, bspw durch Forma­tierung solcher Zellen als Text (@).
Übrigens, erst in diesem letzteren Fall wirkt Empty anders als ein (Lösch-)Leer-String.
Gruß, Luc :-?

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Mit Macro Datum 00.01.1900 löschen"