Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Datenimportieren per Makro





Frage

hi, ich hoffe, dass mir jemand helfen kann. um daten aus einer text-datei in excel zu importieren, habe ich bis jetzt immer die funktion AUFZEICHNEN benutzt. ich brauche jetzt aber ein makro, das es ermöglicht, verschiedene dateien zum datenimport auszuwählen (evtl. per abfrage). hoffentlich weiß irgendjemand von euch wie man das machen könnte. danke schonmal! gruß vreni

Antwort 1 von JoeKe

Hi vreni,

kopier folgenden Code in ein Standartmodul und weise es einer Schaltfläche zu.
Option Explicit
Sub Datei_einfügen()
Dim Antwort As String, Meldung As String
Dim Titel As String, Vorschlag As String
Meldung = "Welche Datei soll eingefügt werden?"
Titel = "Datei einfügen"
Vorschlag = "Test1"
Antwort = InputBox(Meldung, Titel, Vorschlag)
ActiveSheet.OLEObjects.Add(Filename:= _
"C:\Dokumente und Einstellungen\User\Desktop\" & Antwort & ".doc", Link:=False, _
DisplayAsIcon:=False).Select
End Sub


Antwort 2 von JoeKe

Hi vreni,

zur Erklärung:
Es wird eine sogenannte InputBox erstellt in der der Namen der Datei die eingefügt werden soll abgefragt wird. Die Dateien müssen bei diesem Beispiel auf dem Desktop als .doc vorliegen.
Falls du nicht zurechtkommst melde dich noch mal.

MfG JöKe

Antwort 3 von JoeKe

Hier nochmal eine überarbeiteter Code, mit dem mögliche Fehler abgefangen werden.

Option Explicit

Sub Makro1()
Dim Antwort As String, Meldung As String
Dim Titel As String, Vorschlag As String
Meldung = "Welche Datei soll eingefügt werden?"
Titel = "Datei einfügen"
Vorschlag = "Test1"
Antwort = InputBox(Meldung, Titel, Vorschlag)
If Antwort = "" Then
Exit Sub
End If
On Error GoTo weiter
ActiveSheet.OLEObjects.Add(Filename:= _
"C:\Dokumente und Einstellungen\User\Desktop\" & Antwort & ".doc", Link:=False, _
DisplayAsIcon:=False).Select
weiter:
MsgBox "Die angegebene Datei existiert nicht!"
End Sub


MfG JöKe

Antwort 4 von vreni

hi JöKe,
erstmal herzlichen dank für deine antwort!!!

das makro funktioniert auch soweit, nur leider wird nicht der inhalt der datei in die arbeitsmappe eingefügt, sondern nur der name der datei.
außerdem erscheint jedes mal die meldung: "die angegebene datei existiert nicht". auch nach dem einfügen.

es wär wirklich nett von dir, wenn du mir nochmal helfen könntest!
gruß vreni

Antwort 5 von JoeKe

Hi vreni,

warum bei dir nur der Name der Datei eingefügt wird verstehe ich nicht. Bei mir (Excel 2002) wird der Inhalt als OLEObject eingefügt.

Das mit der Meldung war mein Fehler. Fehlt noch ein Exit:

ActiveSheet.OLEObjects.Add(Filename:= _
"C:\Dokumente und Einstellungen\User\Desktop\" & Antwort & ".doc", Link:=False, _
DisplayAsIcon:=False).Select
Exit Sub <=hier einfügen
weiter:
MsgBox "Die angegebene Datei existiert nicht!"
End Sub

MfG JöKe

Antwort 6 von vreni

hallo JöKe,

ich hatte den Dateityp auf .txt geändert, weil ich die textdateien mit einem editor erstellt habe.
das einlesen von dateien des typs .doc habe ich jetzt auch hinbekommen.
trotzdem habe ich leider noch ein weiteres problem:
meine textdatei sieht in etwa so aus:

12 35 65 7 45 96 85 36 25 15 47
5 12 78 45 68 32 6 8 50 68 29

dabei soll dann jede zahl in eine einzelne zelle eingefügt werden.
bisher wird die ganze datei bei mir in eine zelle importiert.
hoffentlich kannst du mir nochmal helfen,
mfg vreni

Antwort 7 von JoeKe

Hi vreni,

werde dir gerne weiter helfen. Leider muss ich jetzt zur Arbeit.
Falls nicht inzwischen jemand von den hier sonst noch anwesenden wissenden Helfern einspringt, werde ich mich gleich morgen früh drumm kümmern. Versprochen


Gruß JöKe

Antwort 8 von JoeKe

Moin vreni,

für dein Problem bietet Excel die Lösung "Text in Spalten". Zu finden unter Menü Daten. Dies lässt sich auch in ein Makro einbauen. Das würde dann so aussehen:
Option Explicit
Sub Text_in_Spalten()
Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1)), _
TrailingMinusNumbers:=True
End Sub

Das Makro wandelt den Text der in den Zellen von Spalte "A" steht um.
Ich hoffe das hilft dir weiter.

MfG JöKe

Antwort 9 von vrenis

hi JöKe,

sorry, dass ich dich schon wieder mit meinen fragen bombardiere. aber ich habe schon wieder ein problem mit dem neuen makro.

wenn ich das makro ausführe, kommt jedes mal die meldung, dass ich keine daten zum umwandeln markiert habe. die excel-funktion über `text in spalten` kann ich dementsprechend auch nicht auswählen.

lg vreni

Antwort 10 von JoeKe

Hi vreni,

kein Problem! ;-))

Aber um dir weiter helfen zu können, bräuchte ich noch ein paar Infos.
Wie fügst du deine Texte ein?
Als OLE Object? Dann geht das mit Text in Spalte nicht.
Es müste erst der Text in eine Zelle kopiert werden. Dies läst sich auch per Makro realisieren.
Wie sieht dein Makro zum einfügen der Dateien im Moment aus? Hast du an meinem Vorschlag Änderungen vorgenommen?
Beschreib auch mal bitte kurz was du erreichen willst. Vieleicht gibt es noch eine andere Lösung.

MfG JöKe

Antwort 11 von vreni

hey JöKe,
ja bisher habe ich die Datei als OLE Objekt eingefügt, so wie es in deinem makro angegeben war.

eigentlich sollen die daten aus der textdatei aber so importiert werden, dass jede einzelne zahl in einer einzelnen zelle steht (also nicht unbedingt als OLE-Objekt).
mit diesen zahlen berechnet excel dann bestimmte quotienten, die dann wiederum in eine andere textdatei exportiert werden. (das klappt auch schon ;))

hoffentlich kannst du mein problem jetzt besser verstehen.

lieben gruß,
vreni

Antwort 12 von JoeKe

Hi vreni,

so habe ich mir das schon gedacht.
Leider arbeiten Excel und Word bei Makros nicht oder wenn, dann schlecht zusammen, da die VBA Befehle sich unterscheiden.
Also gut das einfügen als OLE klappt. Um die Zahlen einzelnd in Zellen zu schreiben muss das OLE-Object aktiviert werden, der Inhalt kopiert und in eine Zelle eingefügt werden. Das ganze wird dann mit Text in Spalten aufgeteilt.
Ich habe schon versucht dies mit dem Makrorkorder aufzuzeichnen. Leider findet das Makro anschliessend die Objecte nicht, da diese bei jedem einfügen eine andere Kennung erhalten. Bisher ist es mir nicht gelungen diese Kennung als Variable zu deklarieren und eine Schleife damit durchlaufen zu lassen.
Ich weis nicht ob dies überhaupt möglich ist. Ich werde mal mein NB mit zur Arbeit nehmen und schauen was ich machen kann und meine Erfolge morgen posten.


Mfg JöKe

Antwort 13 von vreni

hi,
ursprünglich habe ich die daten mit der funktion `daten importieren`eingefügt. dabei wurden die zahlen auch wie gewünscht in einzelne zellen importiert.

kann man diese funktion nicht vielleicht mit dem makro verbinden, das du mir zur dateiabfrage geschrieben hast?
so dass zuerst die datei ausgewählt werden kann und dann die zahlen in die zellen importiert werden können.

ich habe nur leider keine ahnung, wie ich die beiden funktionen miteinander verbinden kann.

lg vreni
vreni

Antwort 14 von JoeKe

Hi vreni,

danke für deinen letzten Hinweis dadurch habe ich die hoffentlich richtig Lösung für dich. Hatte mich wohl zu stark in meine erste Lösung verrannt.
Kopier folgenden Code in ein StandartModul und weise ihm einer Schaltfläche zu.

Sub Daten_importieren()
Dim Antwort As String, Meldung As String, Titel As String, _
Vorschlag As String
Meldung = "Welche Datei soll eingefügt werden?"
Titel = "Datei einfügen"
Vorschlag = "Test1"
Antwort = InputBox(Meldung, Titel, Vorschlag)
On Error GoTo weiter
If Antwort = "" Then
Exit Sub
End If
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Dokumente und Einstellungen\User\Desktop\" & Antwort & ".txt", _
Destination:=Range("A1"))
.Name = Antwort
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = True
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Exit Sub
weiter:
MsgBox "Die angegebene Datei existiert nicht!"
End Sub


Ich hoffe das ist jetzt das was du brauchst.

Bei weiteren Fragen melde dich wieder.

MfG JöKe

Antwort 15 von JoeKe

Nachtrag:
Das Makro arbeitet ähnlich wie das erste. Es wird in einer InputBox die einzufügende Datei abgefragt bei leer Eingabe oder klick auf Abbrechen endet es. Bei einer falschen Eingabe wird dies in einer MsgBox angezeigt. Bei einer richtigen Eingabe sollen;-)) die Daten bei A1 beginnend zellenweise eingelesen werden. Probiers einfach mal aus.

Antwort 16 von vreni

hi JöKe!

vielen, vielen dank für deine hilfe!!!

das makro funktioniert jetzt perfekt :)

wenn du magst, schick mir doch mal deine adresse;
vrenis01@web.de

ich würde dir gerne ein kleines dankeschön zuschicken.

danke für alles,
gruß vreni

Antwort 17 von JoeKe

Hi vreni,

freut mich, dass es doch noch funkrioniert. Obwohl ich mich zu erst richtig verrannt hatte.
Und vielen Dank für die Rückinfo.

MfG JöKe

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: