Ich hab da mal ne Frage. Ich habe ne CSV Datei, dort sind die zu
importierenden Felder mit ; getrennt. Nun kann es sein, dass ein Datenwert
zwischen den ; ein , enthält.
Beispiel
Name;Datum;Heinz, Kasper;Strasse;;;;;
mit folgendem Script importiere ich die CSV Datei in ein anderes Excel File.
Das funktioniert soweit problemlos. Solange nirgends ein Komma in einem
Datenfeld ist. So wie bei "Heinz, Kasper". Dort stoppt das Scripft und ich
werde ich gefragt ob ich den Datensatz überscheiben soll. Muss also manuell
intervenieren.
Hat jemand einen Tipp. Ich hoffe ich hab mich einigermassen verständlich
ausgedrückt...
Danke und Gruss Thom
Script :
Sub imp_resdaten_n()
' löschen der Daten im Arbeitsblatt Cockpit_news
Dim TargetFilname As String
TargetFilename = ActiveWorkbook.Name
Sheets("Cockpit_news").Select
Range("A2:O2000").Select
Selection.ClearContents
Range("A1").Select
Sheets("Menu").Select
' Importiert die Daten aus resdaten_n_JJJJMMTT.csv
Sheets("Cockpit_news").Select
Range("a2").Select
Workbooks.OpenText ActiveWorkbook.Path & "/resdaten_n_*.csv"
Range("A1:o2000").Select
Selection.Copy
Dim Filname As String
Filename = ActiveWorkbook.Name
Windows(TargetFilename).Activate
Range("A2").Select
ActiveSheet.Paste
Range("a2").Select
If Range("a2") <> "" Then
Range(Selection, Selection.End(xlDown)).Select
Selection.TextToColumns Destination:=Range("A2"), DataType:=xlDelimited,
_
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False,
Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo
_
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5,
1), Array(6, 1), _
Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1),
Array(12, 1), Array(13, 1 _
), Array(14, 1), Array(15, 1)), TrailingMinusNumbers:=True
Columns("L:L").Select
Selection.NumberFormat = "0000"
Range("A2").Select
Else
End If
Sheets("Menu").Select
Range("b1").Select
Selection.Copy
ActiveCell.PasteSpecial
Windows(Filename).Activate
ActiveWindow.Close
Windows(TargetFilename).Activate
Sheets("Menu").Select
End Sub
Hallo Thom,
ich hab mal das hier gemacht:
Workbooks.OpenText FileName:=sFile _
, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:= _
False, Comma:=False, Space:=False, Other:=FalseWenn Du hier Tab auf false und Semicolon auf true setzt,geht es dann?M�sste dann
eigentlich das Komma ignorieren.Das ganze damalige Projekt ist
hier:http://www.scheidgen.de/Excel/wuehltisch/bestandsabwertung/bestandsabwertung-01.htmdort findest Du die Codezeile im Kontext,
wenn's Dich interessiert.Aber eigentlich m�sste Dir schon mit der einen Zeile hier oben geholfensein. Sagst Du Bescheid, ob's
geht?Gru�Huberthttp://www.scheidgen.de/excel
Workbooks.OpenText FileName:=sFile _
, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:= _
False, Comma:=False, Space:=False, Other:=False
Wenn Du hier Tab auf False und Semicolon auf True setzt, geht es dann?
Müsste dann eigentlich das Komma ignorieren.
Das ganze damalige Projekt ist hier:
http://www.scheidgen.de/Excel/wuehltisch/bestandsabwertung/bestandsabwertung-01.htm
dort findest Du die Codezeile im Kontext, wenn's Dich interessiert.
Aber eigentlich müsste Dir schon mit der einen Zeile hier oben
geholfen sein. Sagst Du Bescheid, ob's geht?
Gruß
Hubert
http://www.scheidgen.de/excel
Danke dir. Ich habe in meinem Scribt den Tab auf False und Semicolon bereits
auf True
Range(Selection, Selection.End(xlDown)).Select
Selection.TextToColumns Destination:=Range("A2"), DataType:=xlDelimited,
_
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False,
Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo
_
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5,
1), Array(6, 1), _
Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1),
Array(12, 1), Array(13, 1 _
), Array(14, 1), Array(15, 1)), TrailingMinusNumbers:=True
Gruss Thom
"Hubert Scheidgen" <hube...@scheidgen1.de> schrieb im Newsbeitrag
news:ho687r$6rj$1...@online.de...
> Ich hab da mal ne Frage. Ich habe ne CSV Datei, dort sind die zu
> importierenden Felder mit ; getrennt. Nun kann es sein, dass ein Datenwert
> zwischen den ; ein , enthält.
...
> mit folgendem Script importiere ich die CSV Datei in ein anderes Excel File.
> Das funktioniert soweit problemlos. Solange nirgends ein Komma in einem
> Datenfeld ist. So wie bei "Heinz, Kasper". Dort stoppt das Scripft und ich
> werde ich gefragt ob ich den Datensatz überscheiben soll. Muss also manuell
> intervenieren.
Das bedeutet das dort in den Zellen etwqs steht. Schaun wir mal...
> Hat jemand einen Tipp. Ich hoffe ich hab mich einigermassen verständlich
> ausgedrückt...
Hast Du Dir schon mal angekuckt was zu diesem Zeitpunkt in dem
Zellbereich drin steht? Ich denke hier ist die Lösung zu suchen.
> Script :
> Sheets("Cockpit_news").Select
> Range("A2:O2000").Select
> Selection.ClearContents
Sowas solltest Du nicht machen, bei den ganzen Select/Selection führt
eine Änderung schnell zu Fehlern und langsam ist es außerdem.
So geht das auch:
Sheets("Cockpit_news").Range("A2:O2000"). ClearContents
> Workbooks.OpenText ActiveWorkbook.Path & "/resdaten_n_*.csv"
> Range("A1:o2000").Select
> Selection.Copy
...
> ActiveSheet.Paste
Hier ist im Prinzip der "Übertäter", ich vermute mal das dieses Paste
schon die Daten auftrennt und in mehrere Zeilen schreibt.
> Selection.TextToColumns Destination:=Range("A2"), DataType:=xlDelimited,
...
> Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo
Hier ist alles korrekt gesetzt.
Könnte es sein das Du vorher irgendwo anders einmal TextToColumns mit
Comma:=True benutzt hast (ggf. auch aus der Oberfläche heraus)?
Excel speichert diese Einstellungen und verwendet sie beim nächsten
Paste automatisch. Und da liegt IMHO der Hase begraben.
Kuck mal nach was direkt nach dem Paste im Blatt steht, wenn dem so
ist wie ich vermute schaun wir weiter.
Und probier auch mal das Makro direkt nach dem Öffnen auszuführen ob
dann der Fehler auch kommt.
Andreas.
"Andreas Killer" <andreas...@gmx.net> schrieb im Newsbeitrag
news:8a6367d4-2c02-4e05...@e7g2000yqf.googlegroups.com...
On 21 Mrz., 19:57, "Thom" <tstu...@nzzmedia.ch> wrote:
> Ich hab da mal ne Frage. Ich habe ne CSV Datei, dort sind die zu
> importierenden Felder mit ; getrennt. Nun kann es sein, dass ein Datenwert
> zwischen den ; ein , enthält.
...
> mit folgendem Script importiere ich die CSV Datei in ein anderes Excel
> File.
> Das funktioniert soweit problemlos. Solange nirgends ein Komma in einem
> Datenfeld ist. So wie bei "Heinz, Kasper". Dort stoppt das Scripft und ich
> werde ich gefragt ob ich den Datensatz überscheiben soll. Muss also
> manuell
> intervenieren.
Das bedeutet das dort in den Zellen etwqs steht. Schaun wir mal...
- hier liegt der Hund begraben
> Hat jemand einen Tipp. Ich hoffe ich hab mich einigermassen verständlich
> ausgedrückt...
Hast Du Dir schon mal angekuckt was zu diesem Zeitpunkt in dem
Zellbereich drin steht? Ich denke hier ist die Lösung zu suchen.
- Da ich den Range A2:O2000 lösche, kann da gar nix drin stehen. Wen nich
das Komma bei "Heinz, Kasper" enferne, so klappt es ohne porbleme.
> Script :
> Sheets("Cockpit_news").Select
> Range("A2:O2000").Select
> Selection.ClearContents
Sowas solltest Du nicht machen, bei den ganzen Select/Selection führt
eine Änderung schnell zu Fehlern und langsam ist es außerdem.
So geht das auch:
Sheets("Cockpit_news").Range("A2:O2000"). ClearContents
- Danke habs angepasst
> Workbooks.OpenText ActiveWorkbook.Path & "/resdaten_n_*.csv"
> Range("A1:o2000").Select
> Selection.Copy
...
> ActiveSheet.Paste
Hier ist im Prinzip der "Übertäter", ich vermute mal das dieses Paste
schon die Daten auftrennt und in mehrere Zeilen schreibt.
- nein tut es nicht.
> Selection.TextToColumns Destination:=Range("A2"), DataType:=xlDelimited,
...
> Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo
Hier ist alles korrekt gesetzt.
Könnte es sein das Du vorher irgendwo anders einmal TextToColumns mit
Comma:=True benutzt hast (ggf. auch aus der Oberfläche heraus)?
- nein
Excel speichert diese Einstellungen und verwendet sie beim nächsten
Paste automatisch. Und da liegt IMHO der Hase begraben.
- Ostern kommt bald
Kuck mal nach was direkt nach dem Paste im Blatt steht, wenn dem so
ist wie ich vermute schaun wir weiter.
Und probier auch mal das Makro direkt nach dem Öffnen auszuführen ob
dann der Fehler auch kommt.
- Fehler kommt auch
Andreas.
Ich hab mal das excel und die CSV Datei in ein ZIP hochgeladen. Evtl. gehts
dann besser zum probieren. Beide Dateien müssen nur im selben Verzeichnis
sein.
http://www.nzz-media.ch/TLOG/test
Dort ist es die Datei Cockpit_n.zip
Danke im Voraus und Gruss Thom
> Hier ist im Prinzip der "Übertäter", ich vermute mal das dieses Paste
> schon die Daten auftrennt und in mehrere Zeilen schreibt.
> - nein tut es nicht.
Ich konnte Dein Problem nicht nachvollziehen, aber bitte probier mal
bitte das angehängte Makro.
Andreas.
Sub imp_resdaten_n()
Dim TargetBook As Workbook, SourceBook As Workbook
Dim R As Range
'Bildschirm aus
Application.ScreenUpdating = False
'Unsere Mappe merken
Set TargetBook = ActiveWorkbook
'CSV öffnen
Workbooks.OpenText ActiveWorkbook.Path & "/resdaten_n_*.csv"
Set SourceBook = ActiveWorkbook
With TargetBook.Sheets("Cockpit_news")
'Löschen der Daten im Arbeitsblatt Cockpit_news
.UsedRange.Offset(1, 0).ClearContents
'Datenbereich im CSV ermitteln
Set R = SourceBook.ActiveSheet.UsedRange
'Datenbreich in Cockpit anpassen
With .Range("A2").Resize(R.Rows.Count)
'Daten eintragen
.Value = R.Value
'Nach CSV splitten
.TextToColumns Semicolon:=True
End With
'CSV schliessen
SourceBook.Close False
End With
'Bildschirm ein
Application.ScreenUpdating = True
End Sub
Danke dir. Es konnte auch nicht funktionieren. Die CSV Datei war ja auch
korrekt. Grins. Sorry. Hab's sie jetzt manipuliert.
Die Zweite Zeile hat ein Koma drin und gibt dann die Meldung aus. Mit deinem
Script gibt es keine Meldung, jedoch wird alles
nach dem Koma nicht importiert..
Ich hoffe jetzt ist das Test.zip besser verständlich.
Gruss Thom
"Andreas Killer" <andreas...@gmx.net> schrieb im Newsbeitrag
news:4ba8ff3a$0$6878$9b4e...@newsspool2.arcor-online.net...
> Danke dir. Es konnte auch nicht funktionieren. Die CSV Datei war ja auch
> korrekt. Grins. Sorry. Hab's sie jetzt manipuliert.
Heißt das jetzt das Problem hat sich erledigt?
Andreas.
Hi
Leider nein. Die Zip Datei hat jetzt die Daten die den Fehler provoziert...
Gruss Thom
Wenn das Komma soviel Probleme bereitet, teile die Zeilen doch selbst am
";" auf. Der Code öffnet die CSV-Datei ohne Excel's Import-Logik und
schreibt die ge'spliteten Daten zeilenweise in "Cockpit_news". Ich habe
allerdings nicht verstanden, was Du in den folgenden Zeilen machst.
Sheets("Menu").Select
Range("b1").Select
Selection.Copy
ActiveCell.PasteSpecial
Sieht aus als würdest Du den Inhalt der Zelle [B1] auf sich selbst
kopieren. Ich habe es wie folgt ersetzt:
[B1].FormulaLocal = [B1].Value
Peter
Sub imp_resdaten_n()
Dim filename As String
Dim file As Object
Dim fso As Object
Dim item As Variant
Dim r As Range
Sheets("Cockpit_news").[A2:O2000].ClearContents
filename = Dir(ThisWorkbook.Path & "\resdaten_n_*.csv")
If filename = "" Then Exit Sub
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile(ThisWorkbook.Path & "\" & filename,1)
Set r = Sheets("Cockpit_news").[A2]
While Not file.AtEndOfStream
For Each item In Split(file.ReadLine, ";")
r.FormulaLocal = item
Set r = r.Offset(, 1)
Next
Set r = r.EntireRow.Cells(2, 1)
Wend
r.Worksheet.[L:L].NumberFormat = "0000"
Sheets("Menu").Select
[B1].FormulaLocal = [B1].Value
End Sub