Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1580to1584
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

CSV-Datei in aktuellem Workbook öffnen

CSV-Datei in aktuellem Workbook öffnen
24.09.2017 15:24:42
Martin
Hallo!
Wohl eine einfache Kiste (wenn man es kann), aber ich bastel schon seit gestern rum und bekomme es nicht hin (Excel 2010, sollte aber nicht versionsabhängig sein.)
Vermutlich ganz einfach Aufgabe mit VBA
Ich habe 3 Worksheets.in einem Workbook
Das Worksheet "Input" soll gefüllt werden mit dem Inhalt einer csv-Datei z.B. Daten.csv.
Zunächst mit Line Input until EOF versucht, aber der Zeilentrenner ist nur ein LF und kein CRLF. Zeilenende wird nicht erkannt.
Aber die normale Öffnen-Funktiion von Excel geht
Die öffnet mir aber immer die CVS-Datei in neuem Workbook und nicht in meinem "Input"-Worksheet meines Workbooks in dem ich das Makro speicher.
Dieser Befehl wurde mit Makrorekorder aufgenommen, habe aber schon viel anderes probiert, was ich gegoogelt habe:
Workbook.OpenText Filename:= _
strFileName, Origin:=65001, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True, Comma:=True, _
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), Array(16, 1), _
Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), Array( _
23, 1), Array(24, 1), Array(25, 1), Array(26, 1), Array(27, 1), Array(28, 1), Array(29, 1), _
Array(30, 1), Array(31, 1), Array(32, 1), Array(33, 1), Array(34, 1), Array(35, 1), Array( _
36, 1), Array(37, 1), Array(38, 1), Array(39, 1), Array(40, 1), Array(41, 1)), _
TrailingMinusNumbers:=True
Also:
1. Datei auswählen mit Maske *.csv
2. Datei öffnen mit Daten in Worksheet "Input"
Danke für Unterstützung.
Wenn ich das heute hinbekommen, gehe ich auch wählen. ;-)
Martin

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV-Datei in aktuellem Workbook öffnen
24.09.2017 17:04:46
Sepp
Hallo Martin,
Warum nicht mit den eingebauten Daten-Tools?
Daten > Daten Abrufen &gt, Aus Datei > Deine Datei wählen &gt, Einstellungen vornehmen > Laden in > Fertig.
Einmal eingerichtet, kannst du die Daten aktualisieren oder die Quelle ändern.
Gruß Sepp

AW: CSV-Datei in aktuellem Workbook öffnen
24.09.2017 17:50:10
Martin
Ja, danke Sepp!
Klar so kann ich es machen.
Es soll aber für Büromitarbeiterinnen sein,die sollen nichts falsch machen können.
Wenn die "Datei öffnen" anwählen, sehen die ja zuerst ohne Umstellung der Auswahlmaske nicht die csv-Datein, sondern *.xls. Und dann kommt diem ganze Auswahl mit den Delimitern etc.
Dannn öffnet sich die Datei in einem neuen Workbook und die kann man dann händisch in das Zielworkbook kopieren.
Im Zielworkbook liegt nämlich das Makro, das benutzt wird um dann mit denn Daten noch eine Menge Sachen anzustellen.
Wenn es nicht anders geht, dann mache ich das so, wie du beschrieben hast und schreib den Mitarbeiterinnen eine Anleitung.
Schönen rest-Sonntag
Martin
Anzeige
AW: CSV-Datei in aktuellem Workbook öffnen
24.09.2017 17:55:03
Sepp
Hallo Martin,
wie sieht den so eine csv aus, das ist nämlich wichtig und der Aufbau ist leider nicht genormt.(Beispieldatei)
Wohin sollen die Daten geladen werden Tabelle/Zelle
Gruß Sepp

AW: CSV-Datei in aktuellem Workbook öffnen
24.09.2017 19:00:54
Martin
Hallo Sepp!
Wie genau der Aufbau der csv ist, ist vermutlich nicht wichtig.
Wenn ich mit dem "Datei Öffnen - Dialog" diese öffne wird die sauber angezeigt.
Es handelt sich um strings, die in "" stehen. Separator ist ,
Am Ende einer Zeile steht nur 0Ahex, d.h LF und kein 0D0A hex für CFLF
Hier die erste Zeile mit dem Header, darunter sind dann die Daten
"Datum","Uhrzeit","Zeitzone","Name","Typ","Status","Währung","Brutto","Gebühr","Netto","Absender E-Mail-Adresse","Empfänger E-Mail-Adresse","Transaktionscode", usw.
Gespeichert werden soll die in einer Tabelle mit dem Namen "Input", die ich mit VBA als zunächst leeres Blatt erzeuge. "Input" befindet sich in der Arbeitsmappe, die auch mein Makro beherbergt. Speicherzelle beginnend mit A1 von Input.
Es geht um das Einlesen vonm Paypal-Zahlungen (die csv kommt von Paypal). Mit dem Makro sollen dann im weiteren Verlauf die Daten umorgansiert und zusammengefasst werden, und dann in eine neue CSV exportiert werden. Diese soll dann in das Buchhaltungsprogramm eingelesen werden können um dort die Zahlungen zu verbuchen.
Gruss
Martin
Anzeige
ok, dann eben nicht!
24.09.2017 19:17:50
Sepp
Hallo Martin,
der Aufbau ist eben schon wichtig, ich arbeite nicht gerne für die Mülltonne, oder passe den Code dann x-Mal an.
Gruß Sepp

AW: ok, dann eben nicht!
25.09.2017 09:35:21
Martin
Hallo Sepp!
So war das nicht gemeint.
Hatte gedacht, dass das kein Unterschied macht, ob eine Zeile nun 20 oder 30 String-Einträge hat, bevor es zur nächsten zeile geht.
Da in der Datei Namen und weiter Angaben drin sind, wollte ich die nicht gerne öffentlich machen.
Wenn ich die Daten zuvor mit einem Editor bearbeite und die Namen durch Peter Lustig ersetze und dann speichere, dann bin ich icht sicher, ob ich die Datei auch in der Form ungewollt verändere, dass das vorhandene LF 0ahex durch CRLF 0d0ahex ersetzt wird.
Den Header habe ich ja schon gemailt.
Wir sollen wir weiter vorgehen?
An einer Lösung bin ich weiter interssiert.
Wie gesagt, öffnen mit Excel als Textdatei geht und die wird auch richtig dargestellt.
Es wird nur ein neues Workbook geöffnet und eben nicht als weiteres Blatt in meinem vorhanden Workbook mit dem Makro, das die weitere Datenverarbeitung vornimmt.
Gruß Martin
Kann erst heute abend wieder antworten.
Anzeige
AW: ok, dann eben nicht!
26.09.2017 19:48:06
Sepp
Hallo Martin,
und warum dann nicht so, wie von mir vorgeschlagen?
Daten > Aus Textdatei > Datei wählen > Einstellungen vornehmen > Ziel festlegen (da kannst du dann die Tabelle/Zelle in deiner Mappe auswählen) > Fertig.
Die Abfrage wird mit der Mappe gespeichert, so dass man bequem die Quelle ändern kann.
Alternativ kann man das ganze auch per rekorder aufzeichnen und das Makro anschließend bearbeiten.
Gruß Sepp

Daten einlesen über Data
26.09.2017 21:57:27
Martin
Hallo Sepp!
Sorry, ichn hatte die entsprechende erste Mail von Dir falsch interpretiert.
Ich habe über "Datei" die Daten eingelesen udn nicht unter "Daten". Nur 1 Buchstabe Unterschied zwischen Datei und Daten.
Man muss sorgfältiger Lesen.
Jetzt habe ich es so gemacht.
Nun sind die Daten in der aktiven Arbeitsmappe.
Habe ich als Makro aufgezeichnet.
Die Datei kann ich aber auswählen, weil der Dialog beim Makro-Abspielen nicht öffnet.
Und den Namen des arbeitsblattes "Import2" wird auch nicht in den Reiter übernommen, heißt da z,.B. Tabelle2 oder Tabelle3, je nachdem wie oft man das macht.
Für mein nachfolgendes Makro zur Weiterbearbeitrung der Daten muss ich aber das Worksheet mit Namen ansprechen und kann dann die Daten vom Arbeitsblatt "Import2" in ein neues Arbetisblatt "Output" kopieren und dabei die Daten verädndern/verketten, so wie ich das brauche.
Noch ein Tipp, wie ich den Dateiuswahldialog auch bei Makroablauf erhalten
und wie ich in das Arbeitsblatt Import2 kopiere.
Das ist beim Aufzeichnen herausgekommen:
Sub EinlesenCSV_DataDialog()
' EinlesenCSV_DataDialog Makro
ActiveWorkbook.Worksheets.Add
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;L:\FiBu\Paypal Kontoauszüge\Paypal 2017-09-all.CSV", Destination:=Range _
("$A$1"))
.Name = "Import2"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 65001
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  _
1, 1, 1, _
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Range("D9").Select
End Sub

Anzeige
AW: Daten einlesen über Data
26.09.2017 22:14:35
Sepp
Hallo Martin,
man kann im Dialog sehr wohl das Blatt auswählen!
Per VBA so.
' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub EinlesenCSV_DataDialog()
Dim strFile As String

With Application.FileDialog(msoFileDialogFilePicker)
  .InitialFileName = "E:\Forum"
  .Title = "CSV-Datei auswählen"
  .ButtonName = "CSV Importieren"
  .InitialView = msoFileDialogViewList
  .Filters.Clear
  .Filters.Add "Text Dateien", "*.txt; *.csv", 1
  .Filters.Add "Alle Dateien", "*.*", 2
  .FilterIndex = 1
  If .Show = -1 Then strFile = .SelectedItems(1)
End With
If Len(strFile) Then
  With Sheets("Import2")
    On Error Resume Next: .QueryTables(1).Delete: On Error GoTo 0
    With .QueryTables.Add(Connection:="TEXT;" & strFile, Destination:=.Range("$A$1"))
      .Name = "Import2"
      .FieldNames = True
      .RowNumbers = False
      .FillAdjacentFormulas = False
      .PreserveFormatting = True
      .RefreshOnFileOpen = False
      .RefreshStyle = xlInsertDeleteCells
      .SavePassword = False
      .SaveData = True
      .AdjustColumnWidth = True
      .RefreshPeriod = 0
      .TextFilePromptOnRefresh = False
      .TextFilePlatform = 65001
      .TextFileStartRow = 1
      .TextFileParseType = xlDelimited
      .TextFileTextQualifier = xlTextQualifierDoubleQuote
      .TextFileConsecutiveDelimiter = False
      .TextFileTabDelimiter = True
      .TextFileSemicolonDelimiter = True
      .TextFileCommaDelimiter = True
      .TextFileSpaceDelimiter = False
      .TextFileColumnDataTypes = Array(4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
      .TextFileTrailingMinusNumbers = True
      .Refresh BackgroundQuery:=False
    End With
  End With
End If
End Sub

Gruß Sepp

Anzeige
AW: Daten einlesen über Data
27.09.2017 09:23:45
Martin
Hallo Sepp
Danke, probiere ich später aus!
MArtin
AW: CSV-Datei in aktuellem Workbook öffnen
24.09.2017 19:58:25
Luschi
Hallo Martin,
wenn meine csv-Dateien viele, viele Datensätze enthalten, ist PowerQuery (PQ) für Excel die 1. Wahl.
Dieses Com-AddIn von Microsoft ist kostenlos und gibt es seit Excel 2010 und Excel ist dabei nur der Startauslöser zum Laden der csv-Datei in das Datenmodell von PQ. Dort können die Daten umgewandelt, sortiert, weiterverarbeit usw. werden.
PowerQuery hat da viele, viele Möglichkeiten, von denen Excel selber nur träumt.
Erst das Endergebnis wird in die Exceltabelle übertragen und kann dann in 1 neue csv-Datei exportiert werden.
Excel ist also nur noch Mittler, aber auch die Einarbeitung in PQ ist mit gewissem Aufwand verbunden, aber immer lohnend. Das Gute dabei ist, das jeder Schritt per Maus/Tastatur dabei von PQ wie beim Makrorecorder mitgeschnitten wird und man hinterher auch manuell eingreifen kann.
Kommt die nächste csv-Datei, ist dieser aufgezeichnete Code darauf wieder anwendbar.
Gruß von Luschi
aus klein-Paris
Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige