Daten aus einer anderen Exceldatei einlesen?
 |
Betrifft: Daten aus einer anderen Exceldatei einlesen?
von: Oliver S.
Geschrieben am: 02.09.2003 13:39:19
Hallo Ihr lieben Helfer,
ich habe mal wieder keinen Plan wie ich meine Vorstellungen in die Tat, bzw. in VBA, umsetzen soll. Beim Betätigen einer Befehlsschaltfläche in meiner Ausgangstabelle soll sich das Fenster zum Öffnen von Exceldateien aufmachen. Es sollte schon der Pfad, z.B. C:\Eigene Dateien, geöffnet sein, so dass ich alle Exceldateien, die sich in dem Pfad befinden sehen kann. Nach der Auswahl soll die Datei, ich nenne diese mal “Datenloggerdaten“, öffnen und zuerst die Zellen A5 bis D5 kopiert und in meiner Ausgangsdatei in A4 eingefügt werden. Danach soll in der Datei “Datenloggerdaten“ die Zellen A8 bis K1500 kopiert werden und in meiner Ausgangsdatei in A7 eingefügt werden. Zum Schluß soll die Datei “Datenloggerdaten“ geschlossen werden. Was ich vielleicht noch erwähnen sollte, die Datei aus der die Daten kopiert werden sollen heißt nicht immer gleich. Sie kann z.B. mal Datenlogger 02-09-2003 oder auch mal Auslesung Schuldorf heißen.
Ich hoffe, Ihr konntet mir folgen und mir helfen.
Schon mal besten Dank,
Oliver
 |
Betrifft: AW: Daten aus einer anderen Exceldatei einlesen?
von: Martin Beck
Geschrieben am: 02.09.2003 15:33:58
Hallo Oliver,
das Öffnen der Datei geht wie folgt:
Sub Übernahme()
ChDrive "C"
ChDir "C:\EigeneDateien"
ZuÖffnendeDatei = Application.GetOpenFilename("Exceldateien (*.xls), *.xls")
Workbooks.Open FileName:=ZuÖffnendeDatei
End Sub
Das Kopieren von einem Workbook zum anderen geht dann "wie üblich".
Gruß
Martin Beck
Betrifft: Schon nicht schlecht, aber....
von: Oliver S.
Geschrieben am: 02.09.2003 17:17:53
Hallo Martin,
danke Dir erst einmal für die Antwort. Das öffnen des Fensters funktioniert. Wenn ich jetzt aber die Befehle zum Kopieren und Einfügen, also
Range("A5:E5").Select
Selection.Copy
Windows("Vorlage Auslesung Datenlogger.xls").Activate
Range("A4").Select
ActiveSheet.Paste
an Dein Makro anhänge, kommt ein Laufzeitfehler 1004 und es wird mir die Zeile
Range("A5:E5").Select
markiert. Woran könnte das liegen.
Außerdem würde ich gerne wissen, wie ich nach dem ersten kopieren wieder in die gerade geöffnete Datei wechseln kann, da ich den Namen der Datei ja noch nicht kenne. Der wird erst ausgewählt, wenn ich die Datei beim Ersten mal öffne. Ich benötige das, da ich nach dem ersten kopieren einen weiteren Bereich auswählen und diesen ebenfalls kopieren möchte und in meine Ausgangstabelle einfügen möchte. Danach soll dann die Datei, die durch die Anweisung geöffnet wurde geschlossen werden.
Wenn möglich wäre es super nett, wenn Du mir die Fragen ebenfalls noch beantworten würdest.
MfG,
Oliver
Betrifft: (Ziemlich) vollständige Lösung
von: Martin Beck
Geschrieben am: 02.09.2003 18:31:17
Hallo Oliver,
vergiß das wechseln und selecten, das ist unnötig und fehlerträchtig.
Ich nehme mal an, der Name der Datei, in die kopiert werden soll, sei bekannt und würde "Zieldatei.xls" lauten. Außerdem nehme ich an, daß beide Dateien nur eine Tabelle enthalten und das die Tabelle in "Zieldatei.xls" "Zieltab" und die in der geöffneten Datei "Quelltab" heißt. All diese Namen mußt Du in nachfolgendem Code anpassen.
Der Name der geöffneten Datei ist egal, da er mit der Zeile
ZuÖffnendeDatei = Application.GetOpenFilename("Exceldateien (*.xls), *.xls")
in der Variablen ZuÖffnendeDatei abgespeichert wird, die man in den Kopierbefehlen verwenden kann.
Jetzt das Makro:
Sub Übernahme()
ChDrive "C"
ChDir "C:\EigeneDateien"
ZuÖffnendeDatei = Application.GetOpenFilename("Exceldateien (*.xls), *.xls")
Workbooks.Open FileName:=ZuÖffnendeDatei
Workbooks(ZuÖffnendeDatei).Worksheets("Quelltab").Range("A5:D5").Copy Destination:= Workbooks("Zieldatei").Worksheets("Zieltab").Range("A4")
Workbooks(ZuÖffnendeDatei).Worksheets("Quelltab").Range("A8:K15000").Copy Destination:= Workbooks("Zieldatei").Worksheets("Zieltab").Range("A7")
Workbooks(ZuÖffnendeDatei).Close
End Sub
Achtung: Der Code ist nicht getestet, da ich die Dateien nicht nachbauen wollte.
Schau Dir generell mal die Hilfe zu COPY an.
Gruß
Martin Beck
Betrifft: Fast vollständig aber noch ein Laufzeitfehler!
von: Oliver S.
Geschrieben am: 02.09.2003 18:54:55
Danke Dir Martin für die Mühe,
die Du Dir wegen mir machst. Leider bricht das Makro jetzt mit dem Laufzeitfehler 9 ab. Ich schreibe mal nachfolgend das von mir angepaste Makro hin:
Private Sub CommandButton1_Click()
ChDrive "F"
ChDir "F:\Arbeit\Auslesedaten Zenner Zähler\"
ZuÖffnendeDatei = Application.GetOpenFilename("Exceldateien (*.xls), *.xls")
Workbooks.Open Filename:=ZuÖffnendeDatei
Workbooks(ZuÖffnendeDatei).Worksheets("LogTab0").Range("A5:D5").Copy Destination:=Workbooks("Vorlage Auslesung Datenlogger.xls").Worksheets("Auslesung Datenlogger").Range("A4")
Workbooks(ZuÖffnendeDatei).Worksheets("LogTab0").Range("A8:K15000").Copy Destination:=Workbooks("Vorlage Auslesung Datenlogger.xls").Worksheets("Auslesung Datenlogger").Range("A7")
Workbooks(ZuÖffnendeDatei).Close
End Sub
Code eingefügt mit
Syntaxhighlighter 2.4
Die Datei, in die die Daten kopiert werden sollen heißt Vorlage Auslesung Datenlogger.xls. Die Tabelle in der Datei heißt Auslesung Datenlogger. Die Tabelle von der die Daten kopiert werden sollen heißt LogTab0. Der Name der Datei in der die Tabelle LogTab0 ist spielt ja keine Rolle hast Du gesagt.
Kannst Du mir eventuell sagen warum jetzt dieser Laufzeitfehler kommt?
MfG,
Oliver
Betrifft: Nur eine Vermutung
von: Martin Beck
Geschrieben am: 02.09.2003 20:34:21
Hallo Oliver,
laß mal das .xls weg.
Gruß
Martin Beck
Betrifft: Das war es leider nicht!
von: Oliver S.
Geschrieben am: 03.09.2003 06:36:16
Moin Martin,
sorry, dass ich mich erst heute morgen melde, aber gestern habe ich dann, nachdem ich den ganzen Tag herumprobiert habe, den PC ausgemacht. Daher kommt erst heute ein Dankeschön von mir. Leider war das nicht der Fehler. Nach Löschen von .xls kommt immer noch der Laufzeitfehler 9. Vielleicht fällt Dir ja noch etwas dazu ein?
Bis dahin noch einen schönen Tag,
Oliver
Betrifft: Jetzt funktionierts!
von: Oliver S.
Geschrieben am: 03.09.2003 09:11:59
Hallöchen,
ich habe es gelöst. Mit ein bisschen herumprobieren funktioniert der Code jetzt.
Nachfolgend der Code, wie er jetzt aussieht:
Sub Datei_auslesen()
Dim dat$, Verz$, ws As Worksheet
Verz = "S:\HAUSSTATION\Auslesedaten Zenner Zähler\"
On Error Resume Next
ChDrive Left(Verz, 1)
ChDir Verz
On Error GoTo 0
Set ws = Workbooks("Vorlage Auslesung Datenlogger.xls").Worksheets("Auslesung Datenlogger")
dat = Application.GetOpenFilename("Exceldateien (*.xls), *.xls")
If Dir(dat) <> "" Then
Workbooks.OpenText Filename:=dat
Else
Exit Sub
End If
Worksheets("LogTab0").Range("A5:D5").Copy ws.Range("A4")
Worksheets("LogTab0").Range("A8:K3000").Copy ws.Range("A7")
ActiveWindow.Close (False)
End Sub
Nomal besten Dank an Martin, er hat mir sehr geholfen.
MfG,
Oliver
Beiträge aus den Excel-Beispielen zum Thema " Daten aus einer anderen Exceldatei einlesen?"