Registriert seit: 11.04.2014
Version(en): 2021
27.11.2015, 20:08
(Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2015, 20:08 von Glausius.)
Hallo snb,
ganz so doof, wie du mich darstellen willst, bin ich nicht!
Selbstverständlich habe ich deinen Code-Vorschlag an meine Bedingungen angepasst, aber für einen ordentlichen Programmierer gehört auch, dass die Variablen deklariert sind und nicht irgendwie im Raum schweben. Soviel habe ich als "VBA-Anfänger" bereits gelernt und gelehrt bekommen... Option Explicit ist Pflicht und On Error Resum Next tabu! Fehlermeldungen sind zu behandeln und nicht zu unterdrücken!
Und trotz der Anpassung auf die richtigen Dokumente (Sheets("Konvert") anstelle Sheet1) läuft dein Code nicht!
Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Günter,
Problem bei snb's code ist der "Unicode text". Nur "Text" sollte funktionieren.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 29.09.2015
Version(en): 2030,5
27.11.2015, 22:35
(Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2015, 22:35 von snb.)
(27.11.2015, 20:08)Glausius schrieb: aber für einen ordentlichen Programmierer gehört auch, dass die Variablen deklariert sind und nicht irgendwie im Raum schweben. Das sind nur Märchen (schau mal z.B. 'Python' an). Nur wenn die 'scope ' Private' oder 'Public' ist sind Deklarationen nicht redundant. Und: Vielen Dank für deine Vorschläge, wäre auch nett gewesen.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Günter,
Problem bei snb's code ist der "Unicode text". Nur "Text" sollte funktionieren.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 11.04.2014
Version(en): 2021
28.11.2015, 00:48
(Dieser Beitrag wurde zuletzt bearbeitet: 28.11.2015, 00:48 von Glausius.)
Hallo André,
danke für die Ergänzung zu snb's-Code, jetzt liest er problemlos ein, aber ich habe nicht die Daten in den Spalten Datum, sondern nur als Standardwerte. Irgenwie ist es verhext. Klappt das eine, fubnktioniert das andere nicht und umgekehrt! Na, vielleicht gibt es noch eine Lösung für Beides - die Hoffnung stirbt bekanntlich zu letzt!
Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Registriert seit: 11.04.2014
Version(en): '97 bis 2016; 365
Hallo Günter,
ich würde nach Einlesen der Datei ein kleines Makro drüberlaufen lassen, sodaß die Spalten entsprechend meiner Vorstellungen quasi zwangsbeglückt neu formatiert werden.
Das scheint mir die einfachste Lösung für Dein Problem zu sein.
Registriert seit: 11.04.2014
Version(en): 2021
Hallo Alle, insbesondere Peter, ich habe nur eine Anpassung an Uwes Code bei meiner Ergänzung vornehmen müssen, es war logisch, dass Excel bei der alten Konstruktion immer dann, wenn es auf eine Zahl gestoßen ist, die in ein Datum umwandeln wollte, weil der Rest der If-Abfrage dann nicht mehr bearbeitet wurde. Da klar ist, dass nur in den ersten beiden Zellen ein Datum steht, ist der Code so ergänzt worden Code: For j = 0 To UBound(arHilf) If IsDate(arHilf(j)) And (j = 0 Or j = 1) Then arData(i, j) = CDate(arHilf(j)) ElseIf IsNumeric(arHilf(j)) Then arData(i, j) = CDbl(arHilf(j)) Else arData(i, j) = arHilf(j) End If Next
und er läuft nun einwandfrei!
Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
28.11.2015, 10:40
(Dieser Beitrag wurde zuletzt bearbeitet: 28.11.2015, 10:40 von schauan.)
Hallo Günter, ich bleibe mal bei der anderen Version und der Lösung für das Datumsproblem. Zu Deiner Frage - Zahlen bis Komma 12 versucht Excel bei Eintrag über VBA in ein Datum zu wandeln, jeweils den ersten des Monats. Wir haben Zahlen ohne Komma - in Zahl, passt. Zahlen mit Komma - in Zahl, passt nicht immer. Datum - soll bleiben, passt nicht Manchmal hilft eine kleine Logiktabelle. Derzeit werden alle numerischen Daten gewandelt. Ich möchte aber nur Zahlen wandeln, auch die, die ein Komma enthalten und nicht als Datum interpretiert werden können. Ich müsste also 3 Bedingungen prüfen. Arbeitsblatt mit dem Namen 'Tabelle1' | | A | B | C | D | 6 | was soll's | Zahl | Zahl mit Komma | Datum | 7 | ISNUMERIC | T | T | T | 8 | AND | | | | 9 | IS NOT DATE | T | F | F | 10 | OR INSTR "," | F | T | F | 11 | SUMME | T | T | F | 12 | | | | | 13 | CDBL | T | T | F |
Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg |
Code: Sub CSV_Datei_einlesen() Set fdDialog = Application.FileDialog(msoFileDialogFilePicker) With fdDialog .Filters.Add "CSV-Dateien", "*.CSV", 1 .Title = "Bitte Datei auswählen" .AllowMultiSelect = False If .Show = -1 Then strDatei = .SelectedItems(1) Else Exit Sub End If End With Set objTextFile = CreateObject("Scripting.FileSystemObject").OpenTextFile(strDatei, 1, False) strInhalt = objTextFile.ReadAll objTextFile.Close varErgebnis = Split(strInhalt, vbCrLf) icnt = UBound(Split(varErgebnis(0), ";")) 'Fuer flexible Anzahl Datenspalten ReDim ardata(0 To UBound(varErgebnis), 0 To icnt) For i = 0 To UBound(varErgebnis) arHilf = Split(varErgebnis(i), ";") If UBound(arHilf) = icnt Then 'aus 15 wurde 16 und aus 16 icnt For j = 0 To icnt ' und auch hier ersetzt icnt die 16 die 15 'und dann pruefen wir mal etwas mehr If IsNumeric(arHilf(j)) And (Not IsDate(arHilf(j)) Or InStr(arHilf(j), ",") > 0) Then ardata(i, j) = CDbl(arHilf(j)) Else ardata(i, j) = arHilf(j) End If Next End If Next Sheets("Konvert").Range("A1").Resize(UBound(ardata, 1) + 1, UBound(ardata, 2) + 1) = ardata End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 11.04.2014
Version(en): 2021
Hallo André,
DAS ist die komplette Lösung - fantastisch! Meine Lösung wandelte nur ein Datum, wenn es in einer bestimmten Zelle steht, deine Lösung erstellt dann ein Datum aus der Zelle, wenn es ein Datum ist in welcher Zelle es auch in dem Arry steht - Klasse Lösung Danke! Jetzt bin ich unabhängig und kann an meinem Projekt weiter!
Wünsche dir ein schönes Wochenende - bei uns schneit es gerade.
Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo Günter, wie sieht es denn damit aus? Option Explicit
Sub CSV_Datei_einlesen_Uwe_2() Dim strDatei As String strDatei = Application.GetOpenFilename("CSV-Dateien (*.csv), *.csv") If Not CVar(strDatei) = False Then Application.ScreenUpdating = False With Workbooks.Open(Filename:=strDatei, Local:=True) .Sheets(1).Cells.Copy ThisWorkbook.Sheets("Konvert").Cells(1) .Close False End With Application.ScreenUpdating = True End If End Sub Gruß Uwe
|