Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1908to1912
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

unklares Phänomen

unklares Phänomen
24.11.2022 10:25:09
Ronald
Hallo an alle!
Ich hab ein unklares Phänomen beobachtet und hoffe, mir kann jemand helfen.
Ich habe einen Datumwandler geschrieben. Es passiert folgendes:
- es kopiert den Inhalt des kompletten Tabellenblattes aus "Kontaktliste" in "Kontaktliste Neu"
- es schließt "Kontaktliste"
- es wandelt mittels Schleife das jeweilige Datum in Spalte L ins US-Format und anschließend in KW/Jahr-Format
- es speichert den jeweiligen KW/Jahr-Wert in der jeweiligen Zelle - aber nicht immer, obwohl es das beim Debuggen einwandfrei macht. Da zeigt es die jeweilige
Spalte, in der der Wert rein soll und auch den erwarteten Wert. Also alles gut. Und wenn ich dann die Datei "Kontaktliste Neu" aufmache, um mir das Ergebnis anzusehen, dann sieht es anders aus. Das ist mir echt zu hoch.
### Ursprungswerte aus Spalte L von "Kontaktliste":
31.12.2099
03.03.2025
04.04.2026
05.05.2027
06.06.2008
27.01.2023
### Ergebnis, wie es in Spalte L der "Kontaktliste Neu" nachher zu sehen ist:
53/2099
2025-10-01
14/2026
18/2027
23/2008
2023-04-01
### Ergebnis, wie man es eigentlich in Spalte L der "Kontaktliste" erwarten würde:
53/2099
10/2025
14/2026
18/2027
23/2008
4/2023
Ich weiß mir keinen Rat mehr. Hoffe, jemand hier kann des Rätsels Lösung aufdecken.
Danke im Voraus.
Gruß Ronald
PS. Hier ist das aktuelle Projekt: https://www.herber.de/bbs/user/156344.zip

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: unklares Phänomen
24.11.2022 10:45:36
Sigi.21
Hallo Ronald,
na das ist Excel mit seinen Autoformatierungen. 10/2025 heißt soviel wie 1.10.2025. Du musst Excel das autoformatieren abstellen. Gib das Eeg. als Text aus.
(Oder, zu zeigst uns deine Black-Box "Datumwandler")
Gruß Sigi
AW: unklares Phänomen
24.11.2022 10:57:51
Ronald
Aus meiner Sicht kann es nicht an der Autoformattierung liegen, da es bei den 4 von 6 Einträgen ja funktioniert. Selbe Ausgangsbasis, selber Quellcode, anderes Resultat. Was komisch ist, beim Debuggen zeigt es die Werte, die erwartet werden, was bedeutet, daß er den Quellcode richtig abarbeitet...eigentlich.
Wieso Blackbox? Ich habe doch das Projekt verlinkt. Hier ist es nochmal: https://www.herber.de/bbs/user/156344.zip
Falls es wirklich an den Autoformattierungen liegen soll, gibts dafür einen Befehl, das zu verhindern?
Gruß Ronald
Anzeige
AW: unklares Phänomen
24.11.2022 11:03:45
Sigi.21
Hallo Ronald,
ja doch, Autoformatierung. Weil nur Werte größer 12 nicht umgewandelt werden. Ist ja logisch, da Monate nicht größer sein können. Kleiner 13 wird als Monat erkannt: 4/2023 = 01/04/2023; 10/2025 = 01/10/2025.
"Blackbox", weil ich keine fremden xlsm-Dateien herunterlade. (Wie viele Helfer hier)
Gruß Sigi
AW: unklares Phänomen
24.11.2022 11:30:19
Ronald
Grüß Dich Sigi
Warum auch immer (Thema Blackbox)?!
Viele fragen explizit danach. Und dafür ist die Funktion des Hochladens ja da. Was kann eigentlich passieren? Man kann ja vor dem Ausführen den Code anschauen. Wie dem auch sei, hier ist der Quellcode:
Code Tabelle1:

Option Explicit
Private Sub cmdDatumTest_Click()
strZelleninhalt = InputBox("Testdatum angeben:")
If strZelleninhalt = "" Then
Exit Sub
Else
Call DatumskonvertierungAlt
Call Umwandlung
MsgBox "Altes Datum: " & strZelleninhalt & vbCrLf & _
"Neues Datum: " & strGanzNeuesDatum
End If
End Sub
Private Sub cmdDurchsuchen_Click()
Dim oFileDialog As FileDialog
Set oFileDialog = Application.FileDialog(msoFileDialogFolderPicker)
With oFileDialog
.Title = "Wählen Sie bitte den gewünschten Ordner aus!"
.ButtonName = "Übernehmen"
.InitialFileName = "C:\\"
.Show
strPfadZumQuellExcel = .SelectedItems(1)
End With
Cells(4, 5) = strPfadZumQuellExcel 'print the file path to sheet 1 (Zeile 2, Spalte 5)
End Sub
Private Sub cmdStart_Click()
Dim c As Range
strPfadZumQuellExcel = Worksheets("Tabelle1").Cells(4, 5).Text
'Quelldatei öffnen
Workbooks.Open strPfadZumQuellExcel & "\Kontaktliste.xlsx"
Set wkbookQuelle = Workbooks("Kontaktliste.xlsx")
Set wksheetQuelle = wkbookQuelle.Worksheets("Tabelle1")
'Zieldatei öffnen
Set wkbookZiel = Workbooks.Open(strPfadZumQuellExcel & "\Kontaktliste Neu.xlsx")
Set wksheetZiel = wkbookZiel.Worksheets("Tabelle1")
wksheetZiel.UsedRange.ClearContents
'wkbookZiel.Close SaveChanges:=True
'Tabellenblatt von Quelle zu Ziel kopieren
lngAnzahlZeilenQuelle = wksheetQuelle.Cells.SpecialCells(xlCellTypeLastCell).Row
lngAnzahlSpaltenQuelle = wksheetQuelle.Cells(1, Columns.Count).End(xlToLeft).Column
'wkbookQuelle.Worksheets("Tabelle1").Range(Cells(1, 1), Cells(lngAnzahlZeilenQuelle, lngAnzahlSpaltenQuelle)).Copy wkbookZiel.Sheets("Tabelle1").Range("A1")
'wkbookQuelle.Close SaveChanges:=False
With wksheetQuelle
.Range(.Cells(1, 1), .Cells(lngAnzahlZeilenQuelle, lngAnzahlSpaltenQuelle)).Copy wksheetZiel.Range("A1")
.Parent.Close SaveChanges:=False
End With
'Spalte durchlaufen und Datum in KW/Jahr ändern
'intAnzahlZeilen = wksheetZiel.Cells.SpecialCells(xlCellTypeLastCell).Row
intAnzahlZeilen = wksheetZiel.Cells(Rows.Count, 1).End(xlUp).Row
For Each c In Worksheets("Tabelle1").Range("L2:L" & intAnzahlZeilen).Cells
intAktiveZeile = c.Row 'ActiveCell.Row
strZelleninhalt = c.Text
Call Datumskonvertierung(c)
Call Umwandlung
Call SpeichereWert
Next
wkbookZiel.Close SaveChanges:=True
MsgBox "Vorgang beendet.", , "Hinweis"
End Sub
Private Sub Datumskonvertierung(rng As Excel.Range)
'von 12.07.2022 in 2022-07-12
'    Dim DateIn As Variant
'    If strZelleninhalt = "" Then
'        Exit Sub
'    Else
'        DateIn = CDate(strZelleninhalt)
'        strNeuesDatum = Year(DateIn) & "-" & Month(DateIn) & "-" & Day(DateIn)
'    End If
If rng  vbNullString Then
rng = CDate(rng)
rng.NumberFormat = "YYYY-mm-dd"
strNeuesDatum = rng.Text
End If
End Sub
Private Sub DatumskonvertierungAlt()
'von 12.07.2022 in 2022-07-12
Dim DateIn As Variant
If strZelleninhalt = "" Then
Exit Sub
Else
DateIn = CDate(strZelleninhalt)
strNeuesDatum = Year(DateIn) & "-" & Month(DateIn) & "-" & Day(DateIn)
End If
End Sub
Private Sub Umwandlung()
If strNeuesDatum = "" Then
Exit Sub
Else
strGanzNeuesDatum = CStr(IsoWeekAndYear(CDate(strNeuesDatum)))
End If
End Sub
Private Sub SpeichereWert()
wkbookZiel.Worksheets("Tabelle1").Range("AF" & intAktiveZeile).Value = "'" & strGanzNeuesDatum
End Sub
Function IsoWeekAndYear(ByVal weekDate As Date, Optional ByVal separator As String = "/") As String
Dim week As Integer
Dim weekYear As Integer
week = IsoWeek(weekDate)
weekYear = Year(weekDate)
If week >= 52 And Month(weekDate) = 1 Then
weekYear = weekYear - 1
ElseIf week = 1 And Month(weekDate) = 12 Then
weekYear = weekYear + 1
End If
IsoWeekAndYear = week & separator & weekYear
End Function
Public Function IsoWeek(ByVal weekDate As Date) As Integer
' Workaround for Wrong Week Number for last Monday in Year - based on https://support.microsoft.com/en-us/kb/200299
Dim retVal As Integer
retVal = Format(weekDate, "ww", vbMonday, vbFirstFourDays)
If retVal > 52 Then
If Format(DateAdd("d", 7, weekDate), "ww", vbMonday, vbFirstFourDays) = 2 Then
retVal = 1
End If
End If
IsoWeek = retVal
End Function
Code Modul1:

Option Explicit
Public wkbookQuelle As Workbook
Public wksheetQuelle As Worksheet
Public wkbookZiel As Workbook
Public wksheetZiel As Worksheet
Public strPfadZumQuellExcel As String
Public lngAnzahlZeilenQuelle As Long
Public lngAnzahlSpaltenQuelle As Long
Public intAnzahlZeilen As Integer
Public strZelleninhalt As String
Public intAktiveZeile As Integer
Public strNeuesDatum As String
Public strGanzNeuesDatum As String
Es gibt drei Dateien. Eine heißt "Start.xlsm", die hat den Quellcode. Dann gibts eine Datei "Kontaktliste.xls", welche in der ersten Zeile die Spaltenüberschriften hat und in Spalte L jeweils das Datum. Als drittes gibt es "Kontaktliste Neu.xls".
Was ich aktuell geändert habe: Das neu gewandelte Datum soll nun in Spalte AF gespeichert werden, was es auch tut. Auch habe ich, um das Ganze als Text zu deklarieren, ein Hochkomma vor den Wert gestellt. Damit funktioniert nun alles, wie es soll. Aber... Später soll dieser Wert automatisiert in einen Serienbrief im Word übertragen werden. Da kann man das Hochkomma nicht gebrauchen. Von daher wäre ich froh, wenn es eine andere Möglichkeit gäbe, die Autoformattierung zu deaktivieren, anstelle des Hochkomma.
Vielen Dank im Voraus.
Gruß Ronald
Gruß Ronald
Anzeige
AW: unklares Phänomen
24.11.2022 11:47:04
Oberschlumpf
jo Sigi,
versteh ich auch nich, wieso das Runterladen von dir (und vielen?) vermieden wird.
Ich gehöre - nicht - zu den Vielen, ich freu mich über jede gezeigte Bsp-Datei per Upload.
und wenn du deinen Computer entsprechend einstellst, z Bsp Dateien nur in ein nicht-vertrauenswürdiges Verzeichnis speicherst, wirst du nach Öffnen einer Datei in diesem Verzeichnis - immer - gefragt, ob Makros aktiviert werden sollen.
Wenn du Makros erst mal - nicht - aktivierst, und dir diese im VBE anschaust, dann würdest ja auch du "bösen Code" erkennen, bevor dieser Schaden auf deinem Computer anrichten könnte.
Ciao
Thorsten
Anzeige
AW: unklares Phänomen
24.11.2022 11:27:36
Rudi
Hallo,
VBA spricht englisch. Da ein Datum nur eine fortlaufende Zahl ist, ist es das sicherste, eine Zahl in die Zelle zu schreiben.
Ändere in Sub Datumskonvertierung
rng = CDate(rng)
in
rng = CLng(CDate(rng))
Gruß
Rudi
AW: unklares Phänomen
24.11.2022 11:32:07
Ronald
Hallo Rudi
Ich habe kein Datum, sondern Kalenderwoche/Jahr in dieser Spalte, welches dann beispielsweise so aussieht: 22/2023.
Gruß Ronald
AW: unklares Phänomen
24.11.2022 11:44:31
Rudi
Hallo,
um die automatische Konvertierung zu umgehen erst das Zellformat auf Text setzen.

Private Sub SpeichereWert()
With wkbookZiel.Worksheets("Tabelle1").Range("L" & intAktiveZeile)
.NumberFormat = "@"
.Value = strGanzNeuesDatum
End With
End Sub
Gruß
Rudi
Anzeige
AW: unklares Phänomen
25.11.2022 09:54:26
Ronald
Vielen lieben Dank! Hat prächtig funktioniert.
Gruß Ronald

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige