Supportnet / Forum / Tabellenkalkulation
Datenimportieren per Makro
Frage
Hallo zusammen,
ich möchte eine *.dat Datei in mein bestehendes Excel-File Arbeitsplatt "Stammdaten" importieren.
Das Makro soll aber zuerst ein Dateimanager zur auswahl der datei öffnen und anzeigen damit ich Datei auswählen kann.
Kann mir jemand helfen???
Vielen Dank im Voraus
Antwort 1 von coros
Hi gast5,
nachfolgendes Makro kopiere in ein Standard Modul und weise es einer Schaltfläche zu.
Bei obigen Makro wird zunächst das Fenster zur Auswahl der zu importierenden Datei aufgemacht. Es wurde bedingt durch das Makro schon eine Vorauswahl getroffen und nur Dateien angezeigt, deren Dateiendung .dat haben. Nachdem eine Datei ausgewählt wurde, werden die Daten der Datei importiert und ab Zelle A1 eingefügt. Bei dem Makro wird, da Du nicht sehr viel geschrieben hast bezüglich des Trennzeichens, das Semikolon als Trennzeichen benutzt. Wenn Du aber ein Komma oder ein Leerzeichen oder ein Tabstopp benötigst, dann musst Du in dem Makro in der Zeile
.TextFileSemicolonDelimiter = True
für ein Komma gegen die Zeile
.TextFileCommaDelimiter = True
für ein Leerzeichen gegen die Zeile
.TextFileSpaceDelimiter = False
bei einem Tabstopp gegen die Zeile
.TextFileTabDelimiter = True
tauschen.
Ich hoffe, Du kommst klar. Bei Fragen melde Dich.
Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 3 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
nachfolgendes Makro kopiere in ein Standard Modul und weise es einer Schaltfläche zu.
Option Explicit
Sub Datenimport()
Dim Importdatei$, Verzeichnis$
Verzeichnis = "E:\"
On Error Resume Next
ChDir Verzeichnis
Importdatei = Application.GetOpenFilename("Exceldateien (*.dat), *.dat")
Application.ScreenUpdating = False
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & Importdatei, _
Destination:=Range("A1"))
.TextFileSemicolonDelimiter = True
.Refresh BackgroundQuery:=False
End With
End SubBei obigen Makro wird zunächst das Fenster zur Auswahl der zu importierenden Datei aufgemacht. Es wurde bedingt durch das Makro schon eine Vorauswahl getroffen und nur Dateien angezeigt, deren Dateiendung .dat haben. Nachdem eine Datei ausgewählt wurde, werden die Daten der Datei importiert und ab Zelle A1 eingefügt. Bei dem Makro wird, da Du nicht sehr viel geschrieben hast bezüglich des Trennzeichens, das Semikolon als Trennzeichen benutzt. Wenn Du aber ein Komma oder ein Leerzeichen oder ein Tabstopp benötigst, dann musst Du in dem Makro in der Zeile
.TextFileSemicolonDelimiter = True
für ein Komma gegen die Zeile
.TextFileCommaDelimiter = True
für ein Leerzeichen gegen die Zeile
.TextFileSpaceDelimiter = False
bei einem Tabstopp gegen die Zeile
.TextFileTabDelimiter = True
tauschen.
Ich hoffe, Du kommst klar. Bei Fragen melde Dich.
Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 3 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 2 von gast5
Hallo coros,
Vielen herzlichen Dank für deine Hilfe.
Nun bin ich schon einen riesen Schritt weiter.
Kann ich unter <Destination> auch ein Arbeitsblatt (bei mir (Stammdaten) angeben?
Zuerst müssten aber alle bestehenden Daten auf diesem Arbeitsblatt gelöscht werden. Erst dann dürfen die neuen importiert werden.
Vielen Dank für die Hilfe.
Freundliche Grüsse
Danny
Vielen herzlichen Dank für deine Hilfe.
Nun bin ich schon einen riesen Schritt weiter.
Kann ich unter <Destination> auch ein Arbeitsblatt (bei mir (Stammdaten) angeben?
Zuerst müssten aber alle bestehenden Daten auf diesem Arbeitsblatt gelöscht werden. Erst dann dürfen die neuen importiert werden.
Vielen Dank für die Hilfe.
Freundliche Grüsse
Danny
Antwort 3 von coros
Moin Danny,
das geht schon, allerdings reicht es nicht hinter "Destination" noch den Blattnamen mit anzugeben. Das geht beim Importieren externer Daten nicht. Die können nur in dem gerade aktiven Blatt eingefügt werden. Aber mit einer kleinen Hilfe bekommt man das schon hin. Man aktiviert vorher einfach das Blatt "Stammdaten", importiert dorthin die Daten, da es ja jetzt das aktive Blatt ist und aktiviert zum Schluss wieder das Blatt, von dem aus das Makro gestartet wurde. Damit man dass ganze nicht mitbekommt, schaltet man die Bildschirmaktualisierung für die Dauer des Makros mit dem Befehl
Application.ScreenUpdating = False
aus. Damit verhindert man, dass man das hin und her springen zwischen den Blättern sonst am Monitor je nach Rechnergeschwindigkeit mehr oder weniger verfolgen kann. Einschalten braucht man diese Bildschirmaktualisierung nicht mehr, das geht nach Ablauf des Makros von alleine.
nachfolgend das Makro, dass das oben beschriebene erledigt. Ebenfalls enthalten ist das löschen aller Daten in dem Stammdatenblatt.
Ich hoffe, Du hast das so gemeint. Bei Fragen oder Problemen weißt Du ja, wo Du Hilfe bekommst.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
das geht schon, allerdings reicht es nicht hinter "Destination" noch den Blattnamen mit anzugeben. Das geht beim Importieren externer Daten nicht. Die können nur in dem gerade aktiven Blatt eingefügt werden. Aber mit einer kleinen Hilfe bekommt man das schon hin. Man aktiviert vorher einfach das Blatt "Stammdaten", importiert dorthin die Daten, da es ja jetzt das aktive Blatt ist und aktiviert zum Schluss wieder das Blatt, von dem aus das Makro gestartet wurde. Damit man dass ganze nicht mitbekommt, schaltet man die Bildschirmaktualisierung für die Dauer des Makros mit dem Befehl
Application.ScreenUpdating = False
aus. Damit verhindert man, dass man das hin und her springen zwischen den Blättern sonst am Monitor je nach Rechnergeschwindigkeit mehr oder weniger verfolgen kann. Einschalten braucht man diese Bildschirmaktualisierung nicht mehr, das geht nach Ablauf des Makros von alleine.
nachfolgend das Makro, dass das oben beschriebene erledigt. Ebenfalls enthalten ist das löschen aller Daten in dem Stammdatenblatt.
Option Explicit
Sub Datenimport()
Dim Importdatei$, Verzeichnis$, aktiver_Blattname As String
Application.ScreenUpdating = False
aktiver_Blattname = ActiveSheet.Name
Sheets("Stammdaten").Activate
Cells.ClearContents
Verzeichnis = "E:\"
On Error Resume Next
ChDir Verzeichnis
Importdatei = Application.GetOpenFilename("Exceldateien (*.dat), *.dat")
Application.ScreenUpdating = False
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & Importdatei, _
Destination:=Range("A1"))
.TextFileSemicolonDelimiter = True
.Refresh BackgroundQuery:=False
End With
Sheets(aktiver_Blattname).Activate
End Sub
Ich hoffe, Du hast das so gemeint. Bei Fragen oder Problemen weißt Du ja, wo Du Hilfe bekommst.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 4 von gast5,
Hallo coros,
das hat alles super geklappt.
Vielen Dank.
Jetzt habe ich nur noch ein Problem.
Ich habe eine Pivot-Tabelle dessen Datenquelle das Arbeitsblatt (Stammdaten) ist. Wenn ich nun die neuen Daten mit dem obigen Makro importiere sollte ich die Pivot-Tabelle aktualisieren.
Ist es möglich das auch noch zu ergänzen?
Vielen Dank für die tollen Bemühungen.
gruss Danny
das hat alles super geklappt.
Vielen Dank.
Jetzt habe ich nur noch ein Problem.
Ich habe eine Pivot-Tabelle dessen Datenquelle das Arbeitsblatt (Stammdaten) ist. Wenn ich nun die neuen Daten mit dem obigen Makro importiere sollte ich die Pivot-Tabelle aktualisieren.
Ist es möglich das auch noch zu ergänzen?
Vielen Dank für die tollen Bemühungen.
gruss Danny
Antwort 5 von coros
Hi Danny,
nachfolgendes Makro, das wie das vorherige ist nur mit dem Zusatz zum Aktualisieren der Pivottabelle, sollte funktionieren.
Du musst allerdings noch in dem Makro in der Befehlszeile
ActiveSheet.PivotTables("PivotTable1").RefreshTable
den Namen "PivotTable1" gegen den Namen Deiner Pivottabelle tauschen.
Ich hoffe, es klappt.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
nachfolgendes Makro, das wie das vorherige ist nur mit dem Zusatz zum Aktualisieren der Pivottabelle, sollte funktionieren.
Option Explicit
Sub Datenimport()
Dim Importdatei$, Verzeichnis$, aktiver_Blattname As String
Application.ScreenUpdating = False
aktiver_Blattname = ActiveSheet.Name
Sheets("Stammdaten").Activate
Cells.ClearContents
Verzeichnis = "E:\"
On Error Resume Next
ChDir Verzeichnis
Importdatei = Application.GetOpenFilename("Exceldateien (*.csv), *.csv")
Application.ScreenUpdating = False
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & Importdatei, _
Destination:=Range("A1"))
.TextFileSemicolonDelimiter = True
.Refresh BackgroundQuery:=False
End With
Sheets(aktiver_Blattname).Activate
ActiveSheet.PivotTables("PivotTable1").RefreshTable
End SubDu musst allerdings noch in dem Makro in der Befehlszeile
ActiveSheet.PivotTables("PivotTable1").RefreshTable
den Namen "PivotTable1" gegen den Namen Deiner Pivottabelle tauschen.
Ich hoffe, es klappt.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 6 von gast05
hallo coros,
Ich habe dir ein Email gesenden mit meiner Datei.
Das Problem ist, dass nach einigen Datenimporten eine Element der Pivot.-Tabelle verloren geht????
Ansonsten würde es sehr gut funktionieren.
vielen Dank
freundlicher Gruss
Danny
Ich habe dir ein Email gesenden mit meiner Datei.
Das Problem ist, dass nach einigen Datenimporten eine Element der Pivot.-Tabelle verloren geht????
Ansonsten würde es sehr gut funktionieren.
vielen Dank
freundlicher Gruss
Danny

