Live-Forum - Die aktuellen Beiträge
Datum
Titel
23.04.2024 14:59:21
23.04.2024 14:47:39
23.04.2024 14:23:45
Anzeige
Archiv - Navigation
1072to1076
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

Hilfe bei Import von *.txt ... :(

Hilfe bei Import von *.txt ... :(
06.05.2009 10:29:57
*.txt
Hallo liebe Mitstreiter,
mit der unbezahlbaren Hilfe von Franz habe ich nun einen Code, der mir dabei hilft per Knopfdruck eine *txt Datei in meine Tabelle zu importieren.
Ich versuche nun seid drei Tagen mir diesen Code so "umzuschreiben", das er mir während des Imports NICHT die Spaltenbreite angepasst wird...sie soll bleibenn wie sie ist.
Desweiteren muss ich in einem anderen Blatt ebenfalls eine *txt-Datei importieren. Da brauche ich allerdings nicht alle Spalten und Zeilen. Erste Zeile der txt-Datei kann weg bleiben. Und ich brauche nur die Spalte B C F H K. Die Spaltenbreite darf ebenfalls nicht verändert werden!!
Wie gesagt mit Hilfe von Franz habe ich den ersten Import (bis auf die feste Spaltenbreite) hinbekommen.
Folgende Codes sorgen für einen reibungslosen Import:

Option Explicit
Sub texteinfuegen()
Dim varTextDatei
Dim strPfadAkt As String, rngEinfuegZelle As Range
strPfadAkt = VBA.CurDir 'Aktives Verzeichnis merken
VBA.ChDir "Macintosh HD:Users:Shared:" 'Verzeichnis mit Textdateien
varTextDatei = Application.GetOpenFilename( _
Title:="Bitte Textdatei mit Daten auswählen und öffnen")
If varTextDatei  False Then
If InStr(1, LCase(varTextDatei), "etik") > 0 Then
'Einfügezelle ermitteln
With ActiveSheet
If .Cells(.Rows.Count, 1).End(xlUp).Row >= 5 Then
Set rngEinfuegZelle = .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
Else
Set rngEinfuegZelle = .Range("A5")
End If
End With
'Querrydaten holen
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & varTextDatei, Destination:=rngEinfuegZelle)
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlMacintosh
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.Refresh BackgroundQuery:=False
End With
Dim objQuerry As QueryTable
'Querries löschen
For Each objQuerry In ActiveSheet.QueryTables
objQuerry.Delete
Next
Else
MsgBox "Gewählt: " & varTextDatei & vbLf _
& "Bitte eine Textdatei wählen, deren Name mit ""etik"" beginnt!"
End If
End If
VBA.ChDir strPfadAkt 'aktuelles Verzeichnis zurücksetzen
End Sub


Und für das löschen der Querries (wenn ich das richtig verstanden habe wird diese in der Procedur oben
aufgerufen? da kann ich mich allerdings auch irren mit fast NULL VBA Kenntnissen) noch folgende Procedur:


Option Explicit
Sub QuerriesLoeschen()
Dim wks As Worksheet
Dim objQuerry As QueryTable
Set wks = Worksheets("Wareneingang")
'Querries löschen
For Each objQuerry In wks.QueryTables
objQuerry.Delete
Next
'Daten löschen
With wks
If .Cells(.Rows.Count, 1).End(xlUp).Row >= 5 Then
.Range(.Cells(5, 1), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, 7)).ClearContents
End If
End With
End Sub


Ich habe nun versucht ein Makro aufzuzreichen.(da der Dateiname der 2ten txt Datei die ich importieren will ja immer gleich heissen kann (User entscheidet)) Aber ehrlich gesagt ist mir das zu unsicher, da ich nicht sicher bin ob wirklich immer jeder am gleichen Ort abspeichert. Die Datei muss also vorher auswählbar sein.
Folgendes Makro funktioniert zwar aber wie gesagt:Die Querris werden nicht wie oben gelöscht,die Spaltenbreite wird nicht wirklich Fehlerfrei in Ruhe gelassen und ich kann die Datei vorher nicht wählen (sie sollte immer best.txt heissen sonst msgbox:)


Sub besteinfuegen()
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;Macintosh HD:Users:Shared:best.txt", Destination:=Range("A3"))
.Name = "best"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.RefreshOnFileOpen = True
.BackgroundQuery = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = False
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlMacintosh
.TextFileStartRow = 2
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 9, 9, 1, 9, 1, 9, 9, 1, 9)
.Refresh BackgroundQuery:=False
.UseListObject = False
End With


P.S. habe das Makro aufgezeichnet und den Haken bei "Spaltenbreite anpassen" rausgenommen. Führe ich es aus funzt es gerade zu traumhaft ABER ich bekomme nach dem Import einen Laufzeitfehler 1004 und er schimpft in Zeile:


.Refresh BackgroundQuery:=False


Ich hoffe sehr das mir wieder jemand (vielleicht sogar Franz ;o)) helfen kann. Komme einfach nicht weiter.
1000 mal danke!!
lg
J.

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hilfe bei Import von *.txt ... :(
06.05.2009 13:03:10
*.txt
Hallo!
Um einen User aufzufordern einen Pfad zu waehlen, kannst Du mal diese Funktion einbinden:

Function getfolder(Optional startFolder As Variant = -1) As Variant
Dim fldr As FileDialog
Dim vItem As Variant
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
.Title = "Select a Folder"
.AllowMultiSelect = False
If startFolder = -1 Then
.InitialFileName = Application.DefaultFilePath
Else
If Right(startFolder, 1)  "\" Then
.InitialFileName = startFolder & "\"
Else
.InitialFileName = startFolder
End If
End If
If .Show  -1 Then GoTo NextCode
vItem = .SelectedItems(1)
End With
NextCode:
getfolder = vItem
Set fldr = Nothing
End Function


einfach folgende Zuweisung im Macroablauf einfuegen:
Userpath=getfoldername
Zu Deinem Problem mit der Nummer 1004: Einfach mal den Code .Refresh BackgroundQuery:=False loeschen oder mit Hochkomma unactiv setzen.
Leider hasst Du Keine Tabelle oder Textfile hochgeladen, sodass ich Dein Macro nicht testen kann.
Probier mal die Aenderungen und lade ggf. Die tabelle und das zu importierende textfile hoch.
gruss
Dirk aus Dubai

Anzeige
AW: Hilfe bei Import von *.txt ... :(
06.05.2009 16:10:04
*.txt
Hallo Dirk,
ersteinmal vielen Dank für Deine Lösungsansätze.
Habe mir das Makro jetzt so angepasst, das es mich die Datei best.txt auswählen lässt und auch sauber mit den gewünschten Zeilen und Spalten befüllt. Querris werden scheinbar auch sauber gelöscht.

Sub besteinfuegen()
Dim varTextDatei
Dim strPfadAkt As String, rngEinfuegZelle As Range
strPfadAkt = VBA.CurDir 'Aktives Verzeichnis merken
VBA.ChDir "Macintosh HD:Users:Shared:" 'Verzeichnis mit Textdateien
varTextDatei = Application.GetOpenFilename( _
Title:="Bitte Textdatei mit Daten auswählen und öffnen")
If varTextDatei  False Then
If InStr(1, LCase(varTextDatei), "best") > 0 Then
'Einfügezelle ermitteln
With ActiveSheet
If .Cells(.Rows.Count, 1).End(xlUp).Row >= 3 Then
Set rngEinfuegZelle = .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
Else
Set rngEinfuegZelle = .Range("A3")
End If
End With
'Querrydaten holen
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & varTextDatei, Destination:= _
rngEinfuegZelle)
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.RefreshOnFileOpen = True
.BackgroundQuery = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlMacintosh
.TextFileStartRow = 2
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 9, 9, 1, 9, 1, 9, 9, 1, 9)
.Refresh BackgroundQuery:=False
End With
Dim objQuerry As QueryTable
'Querries löschen
For Each objQuerry In ActiveSheet.QueryTables
objQuerry.Delete
Next
Else
MsgBox "Gewählt: " & varTextDatei & vbLf _
& "Bitte eine Textdatei wählen, deren Name mit ""best"" beginnt!"
End If
End If
VBA.ChDir strPfadAkt 'aktuelles Verzeichnis zurücksetzen
End Sub


Klappt alles wunderbar. NUR habe ich immernoch das Problem, das er mir die Spaltenbreite anpasst. :(
.Refresh BackgroundQuery:=False auskommentieren hat zur Folge, das er mir garnichts mehr importiert..
*schmoll* was ist das nur, es muss doch eine Möglichkeit geben, das die Spaltenbreite nicht verändert wird.
Geht es wirklich nur in dem ich die Spaltenbreite vorher auslese und nach dem Import wieder setze? (hab ich gegooglet das das gehen soll...)
Hat jemand noch einen Tip?
vielen Dank
Gruss
J.

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige