Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datenimport csv OHNE Datenverbindung

Forumthread: Datenimport csv OHNE Datenverbindung

Datenimport csv OHNE Datenverbindung
07.02.2019 11:11:54
Burak
Moin,
also ich importiere seit geraumer Zeit verschiedene csv-Dateien per Makro.
Da mein ganzes Workbook immer langsamer wurde, habe ich etwas recherchiert und vermute es liegt daran dass er inzwischen über 1000 Datenverbindungen aufgebaut hat.
Das Importmakro habe ich irgendwo im Internet gefunden und angepasst. Aber eine Datenverbindung möchte ich definitiv nicht haben.
Also kann man in folgendem Code entweder verhindern, dass Datenverbindungen(Query Tables) aufgebaut werden oder hinzufügen, dass am Ende alle Datenverbindungen gelöscht werden?
'Import anhand Datum
For i = tage To 0 Step -1
EndDatum = EndDatum - i
'Enddatum umwandeln für Import
endjahr = Right(EndDatum, 4)
endmonat = Mid(EndDatum, 4, 2)
endtag = Left(EndDatum, 2)
'umgewandeltes Enddatum zusammen setzen
enddatum2 = endjahr & endmonat & endtag
'Linien 1-4
For k = 1 To linien
'Import einer leeren Datei
If FileLen(rehmpfad & k & "'_'" & enddatum2 & "'.csv") = 0 Then
'Import einer nicht leeren Datei
Else
Set wsroh = ActiveWorkbook.Sheets("R" & k)
'Zeilen zählen
Zeilenzahl = ActiveWorkbook.Sheets("R" & k).Cells(1, rohmbc).CurrentRegion.Rows.Count
'Dateipfad und Ziel für Import
With wsroh.QueryTables.Add(Connection:="TEXT;" & rehmpfad & k & "'_'" & enddatum2 & "'. _
csv", Destination:=wsroh.Cells(Zeilenzahl + 1, rohmbc))
'Import als Textformatierung
.TextFileParseType = xlDelimited
'Spaltentrennung in Quelldatei per Komma
.TextFileCommaDelimiter = True
'Aktualisieren der externen Datenverbindung
.Refresh
End With
End If
Next k
'Nächster Tag
EndDatum = EndDatum + i
Next i
bzw explizit:

With wsroh.QueryTables.Add(Connection:="TEXT;" & rehmpfad & k & "'_'" & enddatum2 & "'.csv",  _
Destination:=wsroh.Cells(Zeilenzahl + 1, rohmbc))
'Import als Textformatierung
.TextFileParseType = xlDelimited
'Spaltentrennung in Quelldatei per Komma
.TextFileCommaDelimiter = True
'Aktualisieren der externen Datenverbindung
.Refresh
End With
Vielen Dank im Voraus!
Viele Grüße
Burak
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenimport csv OHNE Datenverbindung
07.02.2019 11:16:35
Daniel
Hallo Burak,
schau dir das mal an:
https://docs.microsoft.com/de-de/office/vba/api/excel.workbook.breaklink?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev11.query%3FappId%3DDev11IDEF1%26l%3Dde-DE%26k%3Dk(vbaxl10.chm199198)%3Bk(TargetFrameworkMoniker-Office.Version%3Dv16)%26rd%3Dtrue
Gruß
Daniel
Anzeige
BreakLink-Methode nicht verstanden :(
07.02.2019 11:45:19
Burak
Ok ich verstehe den Link nur zur Hälfte, da
1. von einer Konvertierung die Rede ist (wobei im Code von "Break" die Rede ist, was eig mehr nach einem Trennen als konvertieren klingt.
2. der Code läuft in Fehler "Typen unverträglich" bei
ActiveWorkbook.BreakLink Name:=astrLinks(1), Type:=xlLinkTypeExcelLinks
Dennoch danke ich dir vielmals :)
Anzeige
AW: BreakLink-Methode nicht verstanden :(
07.02.2019 11:58:03
Daniel
Versuche am Ende deines Codes dieses:
Sub UseBreakLink()
Dim i As Long
Dim astrLinks As Variant
astrLinks = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)
For i = 1 To UBound(astrLinks)
ActiveWorkbook.BreakLink Name:=astrLinks(i), Type:=xlLinkTypeExcelLinks
Next i
End Sub
Das macht genau was du willst, nämlich die Links entfernen und nur die Werte der Zellen beibehalten.
Anzeige
astrLinks = Leer
07.02.2019 12:21:30
Burak
Erneut "Typen unverträglich" diesmal beim Schleifenzähler, da er sagt die Variable astrLinks ist leer, aber unter "Daten - Verbindungen" sehe ich jede Menge Verbindungen.
Wo liegt das Problem?
LG
AW: Datenimport csv OHNE Datenverbindung
07.02.2019 12:06:57
PeterK
Hallo
Vorsicht: löscht ALLE Verbindungen

Dim qt As QueryTable
Dim ws As Worksheet
For each ws in ActiveWorkbook.worksheets
For Each qt In ws.QueryTables
If qt.Refreshing Then qt.CancelRefresh
qt.Delete
Next
Next

Anzeige
Funktioniert top! Danke :)
07.02.2019 12:24:17
Burak
Das funktioniert einwandfrei und auch ohne andere Makros!
Super Danke dir!!!
;
Anzeige

Infobox / Tutorial

Datenimport aus CSV ohne Datenverbindung


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und erstelle ein neues Makro.
  2. Füge den folgenden VBA-Code ein, um die CSV-Dateien zu importieren, ohne eine Datenverbindung aufzubauen:
'Import anhand Datum
For i = tage To 0 Step -1
    EndDatum = EndDatum - i
    'Enddatum umwandeln für Import
    endjahr = Right(EndDatum, 4)
    endmonat = Mid(EndDatum, 4, 2)
    endtag = Left(EndDatum, 2)
    'umgewandeltes Enddatum zusammen setzen
    enddatum2 = endjahr & endmonat & endtag
    'Linien 1-4
    For k = 1 To linien
        'Import einer leeren Datei
        If FileLen(rehmpfad & k & "'_'" & enddatum2 & "'.csv") = 0 Then
            'Import einer nicht leeren Datei
        Else
            Set wsroh = ActiveWorkbook.Sheets("R" & k)
            'Zeilen zählen
            Zeilenzahl = ActiveWorkbook.Sheets("R" & k).Cells(1, rohmbc).CurrentRegion.Rows.Count
            'Dateipfad und Ziel für Import
            With wsroh.QueryTables.Add(Connection:="TEXT;" & rehmpfad & k & "'_'" & enddatum2 & "'.csv", Destination:=wsroh.Cells(Zeilenzahl + 1, rohmbc))
                'Import als Textformatierung
                .TextFileParseType = xlDelimited
                'Spaltentrennung in Quelldatei per Komma
                .TextFileCommaDelimiter = True
                'Aktualisieren der externen Datenverbindung
                .Refresh
            End With
        End If
    Next k
    'Nächster Tag
    EndDatum = EndDatum + i
Next i
  1. Füge am Ende des Codes den folgenden Abschnitt hinzu, um alle Datenverbindungen zu entfernen:
Dim qt As QueryTable
Dim ws As Worksheet
For each ws in ActiveWorkbook.worksheets
    For Each qt In ws.QueryTables
        If qt.Refreshing Then qt.CancelRefresh
        qt.Delete
    Next
Next

Häufige Fehler und Lösungen

  • Fehler: "Typen unverträglich"
    Dies kann auftreten, wenn die Variable astrLinks leer ist. Stelle sicher, dass mindestens eine Datenverbindung vorhanden ist, bevor du die Schleife startest.

  • Fehler: "astrLinks = Leer"
    Wenn du diese Fehlermeldung erhältst, überprüfe unter "Daten - Verbindungen", ob tatsächlich Verbindungen existieren. Möglicherweise musst du auch den Typ der Datenverbindungen überprüfen.


Alternative Methoden

Eine andere Möglichkeit, CSV-Daten zu importieren ohne eine Datenverbindung zu erstellen, besteht darin, die Daten direkt in ein Array zu laden und anschließend in die Excel-Tabelle zu übertragen. Hier ist ein einfacher Ansatz:

Dim csvData As Variant
Dim filePath As String
filePath = rehmpfad & "deinedatei.csv"

Open filePath For Input As #1
csvData = Split(Input$(LOF(1), 1), vbCrLf)
Close #1

Dim ws As Worksheet
Set ws = ActiveWorkbook.Sheets("DeinBlatt")
For i = LBound(csvData) To UBound(csvData)
    ws.Cells(i + 1, 1).Value = csvData(i)
Next i

Diese Methode importiert die CSV-Daten ohne eine Tabelle und ohne Verbindungen.


Praktische Beispiele

Wenn du beispielsweise Daten von mehreren CSV-Dateien importieren möchtest, kannst du das Skript so anpassen, dass es in einer Schleife durch verschiedene Dateien iteriert. Hier ist ein Beispiel, das die oben genannten Konzepte kombiniert:

For k = 1 To 5 'Angenommen, du hast 5 CSV-Dateien
    Call ImportCSV(rehmpfad & k & ".csv", "R" & k)
Next k

Sub ImportCSV(filePath As String, sheetName As String)
    Dim ws As Worksheet
    Set ws = ActiveWorkbook.Sheets(sheetName)
    'Hier den Import-Code einfügen
End Sub

Tipps für Profis

  • Verwende die BreakLink-Methode, um alle Links in der Arbeitsmappe zu entfernen, bevor du den Import durchführst. Dies kann die Leistung verbessern.
  • Achte darauf, dass du die Dateipfade anpassen kannst, indem du die Variablen rehmpfad und rohmbc entsprechend setzt.
  • Teste den Import mit einer kleinen Datei, um sicherzustellen, dass alles wie gewünscht funktioniert, bevor du größere Datenmengen importierst.

FAQ: Häufige Fragen

1. Warum sollte ich Datenverbindungen vermeiden?
Datenverbindungen können die Leistung deiner Excel-Datei verlangsamen, insbesondere wenn viele Verbindungen bestehen. Durch das Vermeiden von Verbindungen wird die Datei schneller und einfacher zu handhaben.

2. Was mache ich, wenn der Import nicht funktioniert?
Stelle sicher, dass der Dateipfad korrekt ist und die CSV-Datei im richtigen Format vorliegt. Überprüfe auch, ob die Datei tatsächlich Daten enthält und nicht leer ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige