Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
664to668
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
664to668
664to668
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

alle Textdateien eines Verzeichnisses importieren

alle Textdateien eines Verzeichnisses importieren
10.09.2005 14:50:20
michael
Hallo,
wie kann ich nacheinander alle textdateien, die sich im selben Verzeichnis wie meine xls-datei befinden in Excel einlesen?
Bspweise so:
Dateiname (ohne .txt)
Inhalt der Datei
Leerzeile(n)
.
.
.
Kann man auch Unterverzeichnisse aufrufen?
Dann würde die xls-Datei im obersten Verzeichnis stehen und nacheinander die Textdateien dieses und der Unterverzeichnisse abgearbeitet.
Sinnvoll wäre dann beim Wechsel in ein neues Verzeichnis den Namen des Verzeichnisses in die Tabelle aufzunehmen.
z.B.
Verzeichnis
Dateiname (ohne .txt)
Inhalt der Datei
Leerzeile(n)
kann mir jemand beim Lösen dieses Problems helfen?
Danke,
Gruß
Michael

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: alle Textdateien eines Verzeichnisses importie
10.09.2005 18:31:36
Josef
Hallo Michael!
Das könnte man zB. so lösen!
' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Multi_Text_Import()
Dim n As Integer
Dim strTemp As String
Dim lRow As Long
Dim wks As Worksheet
Dim fso As Object

lRow = 1 'Startzeile in der Tabelle

On Error GoTo ERRORHANDLER

With Application
  .ScreenUpdating = False
  .EnableEvents = False
  .DisplayAlerts = False
  .Calculation = xlCalculationManual
End With

Set wks = ActiveSheet 'Oder: Set wks = Sheets("Tabellenname")

Set fso = CreateObject("Scripting.FileSystemObject")

With Application.FileSearch
  
  .LookIn = ThisWorkbook.Path
  .FileType = msoFileTypeAllFiles
  .Filename = "*.txt"
  .SearchSubFolders = True 'Unterordner durchsuchen True/False
  .Execute
  
  For n = 1 To .FoundFiles.Count
    
    wks.Cells(lRow, 1) = fso.GetParentFolderName(.FoundFiles(n))
    lRow = lRow + 1
    
    wks.Cells(lRow, 1) = fso.getbasename(.FoundFiles(n))
    lRow = lRow + 1
    
    Open .FoundFiles(n) For Input As #1
    
    Do While Not EOF(1)
      
      Input #1, strTemp
      wks.Cells(lRow, 1) = strTemp
      lRow = lRow + 1
      
    Loop
    
    Close #1
    
    lRow = lRow + 1
    
  Next
  
End With

'Text in Spalten:
'Trennzeichen ggf. anpassen!
wks.Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
  TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
  Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
  :=Array(Array(1, 1))

wks.Columns.AutoFit

ERRORHANDLER:

With Application
  .ScreenUpdating = True
  .EnableEvents = True
  .DisplayAlerts = True
  .Calculation = xlCalculationAutomatic
End With

End Sub


Gruß Sepp
P.S.: Rückmeldung nicht vergessen!


Anzeige
...bis auf ein Mysterium läufts
10.09.2005 22:19:38
michael
Hallo Josef,
super, Wahnsinn - vielen Dank!
1.
was bedeutet/bewirkt eigentlich Array(Array(1,1))
wenn ichs als Macro aufzeichne kommen noch weitere Arrays -kann aber beim abspielen keinen Unterschied zw. 1x Array und vielen Arrays feststellen. Weißt du das?
2.
beim weiteren Testen ist mir aufgefallen, dass die Reihenfolge wie die Textdateien abgearbeitet werden nicht alphanummerisch innerhalb der Verzeichnisstruktur sondern alphanummerisch über alle vorhandenen Textdateien ohne beachtung der Struktur erfolgt. Läßt sich auch in eine alphanummerische Reihenfolge innerhalb der Ordnerstruktur realisieren? Wobei zuerst der Hauptordner und danach der 1.Unterodner und dessen Unterordner vor dem 2.Unterordner und dessen Unterodner abgearbeitet wird - analog der Baumstruktur, die sich aus dem Explorer ergibt.
...mysteriös ist, dass die Textdateien nach dem das Macro die Zeilen ausgelesen hat, im Editor nur noch Vierecke zeigt. In WordPad seh ich noch den ursprüngliche Inhalt. Das Speicherdatum hat sich nicht verändert.
Beim testen hab ich dann im 2. Schritt aus den vorhandenen textdateien (die mit den Vierecken) ein Unterverzeichnis erstellt und etwas neues reingeschrieben (ich hab die 4-ecke markiert und überschrieben).
Nun erscheinen in excel irgendwelche Zeichen vor dem neuen Eintrag (es ist ein y mit Umlautpunkten drüber und ein Zeichen das aussieht wie ein P nur dass der Bauch in der Mitte ist)
Hast du dafür eine Erklärung? Bei anderen Textdateien, die ich in mein Testverzeichnis kopiert habe, hat sich nichts verändert.
War das ein einmaliger Zufall oder kann das unter bestimmten Umständen wieder auftreten - wäre schade, wenn es mir meine Ergebnisfiles verändern würde...
DAnke und viele Grüße
Michael
Anzeige
AW: ...bis auf ein Mysterium läufts
10.09.2005 23:27:40
Josef
Hallo Michael!
Zu 1.)
Schau dir mal "TextToColumns" in der OH an, da ist das ganze recht gut erklärt!
Zu 2.)
Die FileSearch Methode sortiert alle gefundenen Dateien entweder auf- oder
absteigend. Da wird nicht zwischen den einzelnen Ordnern unterschieden!
Probier mal diesen Code, dann sollte die Reihenfolge stimmen.
' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private lRow As Long
Private fso, fo, fu
Private arrFiles() As String
Private n As Integer

Sub Multi_Text_Import()
Dim strTemp As String
Dim wks As Worksheet
Dim iFile As Integer

lRow = 1 'Startzeile in der Tabelle

On Error GoTo ERRORHANDLER

With Application
  .ScreenUpdating = False
  .EnableEvents = False
  .DisplayAlerts = False
  .Calculation = xlCalculationManual
End With

Erase arrFiles
n = 0
iFile = FreeFile

Set wks = ActiveSheet 'Oder: Set wks = Sheets("Tabellenname")

Set fso = CreateObject("Scripting.FileSystemObject")

Set fo = fso.getfolder(ThisWorkbook.Path)

If getFiles(fo, "txt", True) <> 0 Then
  
  With wks
    
    .Cells.Clear
    
    For n = LBound(arrFiles) To UBound(arrFiles)
      
      .Cells(lRow, 1) = fso.GetParentFolderName(arrFiles(n))
      lRow = lRow + 1
      
      .Cells(lRow, 1) = fso.getbasename(arrFiles(n))
      lRow = lRow + 1
      
      Open arrFiles(n) For Input As #iFile
      
      Do While Not EOF(iFile)
        
        Input #iFile, strTemp
        .Cells(lRow, 1) = strTemp
        lRow = lRow + 1
        
      Loop
      
      Close #iFile
      
      lRow = lRow + 1
      
    Next
    
  End With
  
  'Text in Spalten:
  'Trennzeichen ggf. anpassen!
  wks.Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
    Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
    :=Array(Array(1, 1))
  
  wks.Columns.AutoFit
  
End If

ERRORHANDLER:

With Application
  .ScreenUpdating = True
  .EnableEvents = True
  .DisplayAlerts = True
  .Calculation = xlCalculationAutomatic
End With

End Sub


Private Function getFiles(pF, sExt As String, Optional SearchSubFolders As Boolean = False) As Long
Dim f

For Each f In pF.Files
  If fso.getextensionname(f) = sExt Then
    Redim Preserve arrFiles(n)
    arrFiles(n) = f
    n = n + 1
    getFiles = -1
  End If
Next

If SearchSubFolders Then
  For Each fu In pF.subfolders
    getFiles fu, sExt, SearchSubFolders
  Next
End If

End Function


Zum Mysterium kann ich nur sagen, das ich im Moment keine Idee habe,
warum und wie das Makro die textdateien verändern sollte!
Gruß Sepp
P.S.: Rückmeldung nicht vergessen!


Anzeige
AW: ...bis auf ein Mysterium läufts
11.09.2005 14:56:25
michael
Hallo Josef,
klasse jetzt wird es ordnerweise absteigend sortiert!
1.) Was muss ich ändern damit die files aufsteigend eingelesen werden? Ich vermutete das getfile = -1 auf 1 zu ändern aber das wars nicht - seltsamerweise ändert sich da gar nichts. Beim Schrittweise durchgehen sehe ich, dass nach dem Aufruf For Each f In pf.Files als f bereits schon der alphabetisch letzte File eingelesen wird. Im Lokalfenster sehe ich unter arrFiles die Auflistung der eingelesenen Files in umgekehrter alphabetischer Reihenfolge.
In der Hilfe finde ich nur FileSearch-objekt als Application.Filesearch
Dann der execute-Aufruf SortBy und SortOrder - das krieg ich aber nicht mit deiner Vorlage zur Deckung...
2.) was muss ich umstellen, wenn ich keine Subfolder durchsuchen möchte? Optional SearchSubFolder AsBoolean = False (es werden aber die Subfolders durchsucht). Irritiert mich da ich True erwartet hätte (auch hier ändert sich nichts wenn ichs dann auf true setze)
Schade, ich hätte gehofft dass ich sowas alleine hinkrieg...
Kannst du mir nochmal weiterhelfen?
Danke und Gruß
Michael
Anzeige
AW: ...bis auf ein Mysterium läufts
11.09.2005 15:27:11
Josef
Hallo Michael!
Also mein Code hat nichts mit dem "Application.FileSearch" Object zu tun!
Wenn du die Sortierrichtung ändern willst, dann geht das nur, wenn man das
ganze Array sortiert, dabei wird aber dann nach dem kompletten Pfad sortiert!
Das könnte man zB. mit "QuickSort" erledigen. Info dazu findest du in der Recherche oder mit Google!
Um die Unterordner nicht zu durchsuchen, ändere die Zeile

If getFiles(fo, "txt", True) <> 0 Then

ab in

If getFiles(fo, "txt") <> 0 Then

"Optional SearchSubFolders As Boolean = False" belegt den Parameter Standardmässig mit False! Wenn man in also weglässt, dann werden Unterordner nicht durchsucht!
Gruß Sepp
Anzeige
AW: ...bis auf ein Mysterium läufts
11.09.2005 16:56:25
michael
Hallo Josef,
danke für die Hilfe!
Aus Interesse würde mich folgendes noch interessieren.
Du hattest mir geantwortet:
Die FileSearch Methode sortiert alle gefundenen Dateien entweder auf- oder
absteigend. Da wird nicht zwischen den einzelnen Ordnern unterschieden!
und:
Wenn du die Sortierrichtung ändern willst, dann geht das nur, wenn man das
ganze Array sortiert, dabei wird aber dann nach dem kompletten Pfad sortiert!
Lässt sich die Änderung der Sortierrichtung in der 1. Version (ohne Beachtung der Verzeichnisstruktur-kompletter Pfad) einfach umkehren? oder geht das auch nur mit Einfügen einer Zusätzlichen Sortiermethode wie z.B. QuickSort.
Momentan arbeite deine 1.Version alphanummerisch aufsteigend (scheint wohl der default zu sein). Wie gesagt aus Interesse würde mich kurz interessieren ob eine kleine Änderung eines Parameters oder ein weiterer Parameter reicht, um auf absteigend umzustellen
Danke und gruß
Michael
Anzeige
AW: Mausabfrage ohne Ein-oder Ausgabebox
11.09.2005 19:57:06
Josef
Hallo Michael!
Bei der FileSearch Methode gibt es ua. den Parameter "SortOrder"
.Execute SortOrder:=msoSortOrderDescending

dann wird absteigend sortiert!
Gruß Sepp
nun bin ich verwirrt...
11.09.2005 21:20:38
michael
HAllo Josef,
sorry ich muss nochmal nachfragen - ich verstehs nicht...
das .Execute SortOrder:=msoSortOrderDescending finde ich in der Hilfe bei FileSearch-objekt als Application.FileSearch. Aber das hat ja nichts mit deinem Code zu tun.
Wie bzw wo krieg ich nun das .Execute SortOrder:=msoSortOrderDescending unter?
Danke und Gruß
Michael
Anzeige
AW: nun bin ich verwirrt...
11.09.2005 21:37:41
Josef
Hallo Michael!
Aber du hast doch geschrieben, das du meinen ersten Code, also
den mit "FileSearch" verwendest!
'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Hoppla...du hast recht...
12.09.2005 00:04:38
michael
Sorry Josef,
hab etwas den Überblick (den Durchblick schon längst) verloren...
Das kommt wenn man mit wenig Macrokenntnissen an 3 Baustellen parallel arbeitet ;-)
Danke
Michael
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige