Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1056to1060
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

Dateipfad einlesen und Datei importieren

Dateipfad einlesen und Datei importieren
06.03.2009 10:55:26
Daniel
Hallo Leute,
ich möchte eine Datei importieren, deren Pfad ich in einer Zelle angebe. Diese Datei soll in die geöffnete Excel Mappe importiert werden. Ich habe ein Makro aufgezeichnet aber es ist beweglich wie ein Stein.
Vielleicht reicht schon ein Befehl wie ich in dem Makro den Dateipfad variabel gestalten kann. Ich habe schon sehr viel im Forum gesehen aber noch nicht das passende gefunden. Cracks werden lachen aber ich verzweifle...
Gruß Daniel

Sub Makro1()
' Makro1 Makro
' Makro am 05.03.2009  aufgezeichnet
ActiveWindow.SmallScroll Down:=-10
Cells.Select
Selection.ClearContents
'Selection.QueryTable.Delete
Range("A1").Select
With ActiveSheet.QueryTables.Add(Connection:="TEXT;J:\NCdiag\V9.ST1", _
Destination:=Range("A1"))
.Name = "V9"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 932
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = " "
.TextFileColumnDataTypes = Array(1, 1, 1, 1)
.TextFileDecimalSeparator = "."
.TextFileThousandsSeparator = ","
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub


14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateipfad einlesen und Datei importieren
06.03.2009 11:06:21
Leitz
Hallo!
Habe mal angehängt wie ich das mache
Sub BestandÖffnen() 'Öffnen der Datei Bestand
If Dir(strLaufwerk & strPfadMonBes & strDateiBestand) = "" Then
MsgBox "Die gewünschte Datei kann nicht gefunden werden! Schwerer Fehler!", vbCritical
Exit Sub
End If
If Datei_offen(strDateiBestand) = False Then
Workbooks.Open strLaufwerk & strPfadMonBes & strDateiBestand
End If
End Sub



Private Function Datei_offen(n As String) As Boolean
Dim wb As Workbook
For Each wb In Workbooks
If wb.Name = n Then
Datei_offen = True
Exit Function
End If
Next
End Function


Die Speicherwerte entweder einlesen aus Zelle oder reinschreiben
Beispiel einlesen aus Zelle
Public strLaufwerk As String
strLaufwerk = Workbooks(strNameSteuerung).Sheets("INI").[B3]
Gruß
Leitz G.

Anzeige
Schwerer Fehler!!
06.03.2009 11:22:17
Renee
Hallo Leitz,
Sorry, wenn das jetzt ein bisschen hart tönt: "Bitte veröffentlich nicht solchen Code!"
Der verursacht mehr als nur schwere Fehler. Bei mir z.B. auch noch Kopf- und Bauchweh ;-))
GreetZ Renée
AW: Schwerer Fehler!!
06.03.2009 13:14:40
Leitz
Hallo !
Diese Variante stammt von herber aus dem Jahr 2003 und funktioniert wunderbar bei mir!
gruß
Leitz G.
sicher nicht! No more comment! (owT)
06.03.2009 13:17:19
Renee

AW: sicher nicht! No more comment! (owT)
06.03.2009 13:45:31
Leitz
Hallo!
Ein Kommentar sei mir noch erlaubt!
Könnte selbst diesen Code gar nicht schreiben!
Habe im Jahr 2003 einen Code zum öffnen von Dateien gebraucht und übers Herber Exel Forum erhalten.
Wenn er so falsch ist dann wahrscheindlich von einem wie ich!
Ich kann aber nur sagen daß dieser Code bei meinen Anwendungen mehrfach tadellos funktioniert.
Lese alle Daten über eine Initialisierungsdatei ein Laufwerk, Dateien.......... mit diesen Code.
Gruß
Leitz G.
Anzeige
du kannst beliebig oft kommentieren
06.03.2009 14:05:03
Renee
Leitz,
1. Zitat: Diese Variante stammt von herber aus dem Jahr 2003 lässt einen vermuten, das er von Hans W. Herber stammt, was ich in Abrede stellte. Das er aus dem Forum ist, kann durchaus sein, das macht ihn aber keineswegs besser!
2. Es fehlen mehrere Definition, die möglicherweise an anderen Orten in deinen Makros sind, die aber durch das Fehlen, den geposteten Code nicht lauffähig machen, bzw. immer auf die "Schwerer Fehler" Msgbox laufen!
3. Der Code hat absolut nix mit dem gestellten Problem zu tun.
Der Code prüft auf offene Arbeitsmappen und öffnet nicht schon offene.
Beim Problem geht es um das importieren von Textdateien in ein Tabellenblatt!
Für dieses will der Anfragesteller den Pfad variable gestalten.
GreetZ Renée
Anzeige
In welcher Tabelle!Zelle ist dein Pfad ? (owT)
06.03.2009 11:25:11
Renee

AW: Dateipfad einlesen und Datei importieren
06.03.2009 12:01:37
Daniel
Danke für die schnelle Info aber irgendwie funktioniert das nicht.
@Renee
In Zelle J1; den Dateipfad lege ich über =verketten(...) an.
Es muß keine msgbox werden, schon alleine der Zugriff auf diese Zelle würde mir in diesem Makro helfen.
Wenn ich erstmal den code dafür hätte, kann ich mir später die Zelle ja selber aussuchen. Denke ich zumindest...;-)
Gruß Daniel
AW: Dateipfad einlesen und Datei importieren
06.03.2009 12:37:46
Renee
Hi Daniel,
Zitat:
Es muß keine msgbox werden, schon alleine der Zugriff auf diese Zelle würde mir in diesem Makro helfen.
Die wäre dann so... tVariablerPfad = ActiveSheet.Range("J1").Value
Ich bezweifle allerdings stark, dass das allein nützt.
Du bist dir im Klaren, dass du mit dem aufgezeichneten Code JEDESMAL ein neues Queryobjekt addierst, d.h. irgendeinmal wird deine Tabelle nicht mehr laufen, bzw. sie wird mit jedem Durchgang langsamer.
Dieser Code in Modul würde genügen um das Ganze variabel zu machen:

Sub Importieren()
Dim tVariablerPfad As String
If ActiveSheet.QueryTables.Count = 0 Then
MsgBox "Es muss einmal manuell importiert werden!", vbOKOnly + vbCritical
Exit Sub
End If
tVariablerPfad = ActiveSheet.Range("J1").Value
With ActiveSheet.QueryTable(1)
.Connection = "TEXT;" & tVariablerPfad & "\9.ST1"
.Refresh BackgroundQuery:=False
End With
End Sub

Natürlich könnte auch der jetzt fixe Filename 9.ST1 variable gestaltet werden.
GreetZ Renée
Anzeige
AW: Dateipfad einlesen und Datei importieren
10.03.2009 07:52:19
Daniel
Hallo Renee
ich habe in einem leeren Excelblatt eine Datei importiert und dein Makro danach ausgeführt. Aber es kommt folgende Fehlermeldung:"Objekt unterstüzt diese Methode oder Eigenschaft nicht" Laufzeitfehler '438'
Gruß Daniel
AW: Dateipfad einlesen und Datei importieren
10.03.2009 08:47:35
Renee
Hi Daniel,
Da war ein Fehler im Code, sorry:
(Achtung: Der Pfad in J1 muss ohne Schluss-\ geschrieben werden. z.B. J:\NCdiag2
und der Filename ist immer V9.ST1)

Sub Importieren()
Dim tVariablerPfad As String
If ActiveSheet.QueryTables.Count = 0 Then
MsgBox "Es muss einmal manuell importiert werden!", vbOKOnly + vbCritical
Exit Sub
End If
tVariablerPfad = ActiveSheet.Range("J1").Value
With ActiveSheet.QueryTables(1)
.Connection = "TEXT;" & tVariablerPfad & "\V9.ST1"
.Refresh BackgroundQuery:=False
End With
End Sub


GreetZ Renée
Anzeige
AW: Dateipfad einlesen und Datei importieren
10.03.2009 10:24:21
Daniel
Hallo Renee,
Vielen Dank für deine Hilfe ich habe mir jetzt selber aufgrund deiner Inputs etwas zusammengebastelt, vielleicht wirfst du mal ein Blick darauf ob es immer funktioniert oder ob ich wieder einen Fehler habe...für meine Zwecke reicht das jetzt erstmal.
Option Explicit

Sub Makro1()
Columns("A:M").Select
Selection.ClearContents
Range("A1").Select
Dim impfile As String
impfile = Application.GetOpenFilename("ST1 Dateien (*.ST1),*.ST1", Title:="Import File auswä _
hlen", buttontext:="Import starten", MultiSelect:=False)
If impfile = "" Then
MsgBox "Import abgebrochen", vbOKOnly + vbInformation, "Abbruch"
Exit Sub
Else
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & impfile & "", Destination:=Range( _
"$A$1"))
.Name = ""
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 932
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = " "
.TextFileColumnDataTypes = Array(1, 1, 1, 1)
.TextFileDecimalSeparator = "."
.TextFileThousandsSeparator = ","
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End If
End Sub


Anzeige
AW: Dateipfad einlesen und Datei importieren
10.03.2009 11:00:08
Renee
Hi Daniel,
Ich habe in meiner ersten Antwort, erwähnt, dass du so dauernd neue QueryTable Objekte in dein Sheet einfügst, was mit der Zeit zu Leistungseinbussen führt und deine Tabelle unnötig aufbläht.
Darum würde ich noch folgendes einbauen:

Sub Makro1()
Dim impfile As String
Dim objQT As Object
impfile = Application.GetOpenFilename("ST1 Dateien (*.ST1),*.ST1", _
Title:="Import File auswählen", _
buttontext:="Import starten", MultiSelect:=False)
If impfile = "" Then
MsgBox "Import abgebrochen", vbOKOnly + vbInformation, "Abbruch"
Exit Sub
Else
ActiveSheet.Columns("A:M").ClearContents
For Each objQT In ActiveSheet.QueryTables
objQT.Delete
Next
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & _
impfile & "", Destination:=Range("$A$1"))
.Name = ""
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 932
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = " "
.TextFileColumnDataTypes = Array(1, 1, 1, 1)
.TextFileDecimalSeparator = "."
.TextFileThousandsSeparator = ","
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End If
End Sub


GreetZ Renée
Anzeige
AW:
10.03.2009 13:10:40
Daniel
Danke Problem gelöst

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige