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

An Ramses:Verzeichnis auslesen->Daten auflisten 2.

An Ramses:Verzeichnis auslesen->Daten auflisten 2.
Oliver
Moin Ramses
und auch an alle anderen. Ich benötige noch mal Deine Hilfe. Die Aufgabenstellung ist ähnlich der von gestern, bei der Du mir so super geholfen hast. Ich habe ein Verzeichnis namens Testdatei. In dem Verzeichnis befinden sich mehrere Unterverzeichnisse namens Testdatei 01, Testdatei 02 usw. In den Unterverzeichnissen befinden sich Exceldateien. Nun möchte ich in Spalte A die Namen der Untervezeichnisse aufgelistet haben. In Spalte B sollen die Dateinamen von den Exceldateien, die sich in dem jeweiligen Unterverzeichnissen befinden, aufgelsitet werden. In Spalte C und D sollten Daten aus den jeweiligen Exceldateien aus dem Tabellenblatt "Vorlage" eingefügt werden. Aber nur die Werte, keine Formeln. Ich habe mal ein Bild hochgeladen, aus dem das vielleicht ersichtlich wird, was ich mir vorstelle.
Userbild
Für allen anderen Helfer, kommt hier noch der Code, den Ramses gestern für mich erarbeitet hat, eventuell kann der als Grundlage genutzt werden.

Sub Daten_kopieren2()
Dim sFile As String, sPath As String
Dim qWb As Workbook, qWks As Worksheet, tarWks As Worksheet
Dim i As Integer, tarRow As Integer
Set tarWks = Workbooks("Inhalt.xls").Worksheets("Tabelle1")
Application.ScreenUpdating = False
Range("A2:H50").ClearContents
tarRow = tarWks.Cells(Rows.Count, 1).End(xlUp).Row + 3
Range("A" & tarRow & ":E" & tarRow).Select
With Selection.Interior
.ColorIndex = 36
End With
sPath = "E:\Testdatei"
If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
sFile = Dir(sPath & "*.xls")
Do While sFile <> ""
tarWks.Cells(tarRow, 2) = sFile
tarRow = tarRow + 1
If sFile <> ThisWorkbook.Name Then
Workbooks.Open sPath & sFile
Else
GoTo exit_loop
End If
Set qWb = ActiveWorkbook
For Each qWks In qWb.Worksheets
tarWks.Cells(tarRow, 1) = qWks.Name
'liest aus sFile J4
qWks.Cells(5, 10).Copy _
Destination:=tarWks.Cells(tarRow, 2)
'liest aus sFile J5
qWks.Cells(4, 10).Copy _
Destination:=tarWks.Cells(tarRow, 3)
'liest aus sFile P2
qWks.Cells(2, 16).Copy _
Destination:=tarWks.Cells(Cells(tarRow, 4).Row, 4)
'liest aus sFile P3
qWks.Cells(3, 16).Copy _
Destination:=tarWks.Cells(Cells(tarRow, 5).Row, 5)
tarRow = tarRow + 1
Next
qWb.Close False
exit_loop:
'tarRow = tarRow + 1
Range("A" & tarRow & ":E" & tarRow).Select
With Selection.Interior
.ColorIndex = 36
End With
sFile = Dir()
Loop
Application.ScreenUpdating = True
End Sub

Schon mal besten Dank an alle helfer,
Oliver
AW: An Ramses:Verzeichnis auslesen->Daten auflisten 2.
Nepumuk
Hallo Oliver,
in welchen Zellen der Tabelle "Vorlage" befinden sich die Werte?
Gruß
Nepumuk
AW: An Ramses:Verzeichnis auslesen->Daten auflisten 2.
Oliver
Moin Nepumuk,
die Werte stehen in J4 und J5.
Gruß,
Oliver
AW: An Ramses:Verzeichnis auslesen->Daten auflisten 2.
01.05.2004 09:28:22
Nepumuk
Hallo Oliver,
dann lauten die beiden Zeilen so:


Cells(lngZeile, 3) = ExecuteExcel4Macro("'" & myFolder.Path & "\[" & myFile.Name & "]" & "Vorlage" & "'!" & Cells(4, 10).Address(ReferenceStyle:=xlR1C1))
Cells(lngZeile, 4) = ExecuteExcel4Macro("'" & myFolder.Path & "\[" & myFile.Name & "]" & "Vorlage" & "'!" & Cells(5, 10).Address(ReferenceStyle:=xlR1C1))

Gruß
Nepumuk
Anzeige
AW: An Ramses:Verzeichnis auslesen->Daten auflisten 2.
Nepumuk
Hallo Oliver,
wenn du dich nicht meldest, dann musst du die Zelladressen selbst anpassen:


Public Sub Daten_kopieren3()
' benötigt Verweis auf Microsoft Scripting Runtime
    Dim myFileSystemObject As New FileSystemObject, myFolders As Folders
    Dim myFolder As Folder, myFile As File, intIndex As Integer, lngZeile As Long
    Application.ScreenUpdating = False
    Range("A2:H65536").ClearContents
    lngZeile = 3
    Set myFolder = myFileSystemObject.GetFolder("E:\Testdatei\")
    Set myFolders = myFolder.SubFolders
    For Each myFolder In myFolders
        Cells(lngZeile, 1) = myFolder.Name
        lngZeile = lngZeile + 1
        With Application.FileSearch
            .LookIn = myFolder.Path
            .FileType = msoFileTypeExcelWorkbooks
            .Execute
            For intIndex = 1 To .FoundFiles.Count
                Set myFile = myFileSystemObject.GetFile(.FoundFiles(intIndex))
                Cells(lngZeile, 2) = myFile.Name
' in den beiden Zeilen die Zellen aus denen die Werte geholt werden anpassen (mein Test mit A1 und B1)
                Cells(lngZeile, 3) = ExecuteExcel4Macro("'" & myFolder.Path & "\[" & myFile.Name & "]" & "Vorlage" & "'!" & Cells(1, 1).Address(ReferenceStyle:=xlR1C1))
                Cells(lngZeile, 4) = ExecuteExcel4Macro("'" & myFolder.Path & "\[" & myFile.Name & "]" & "Vorlage" & "'!" & Cells(1, 2).Address(ReferenceStyle:=xlR1C1))
                lngZeile = lngZeile + 1
            Next
        End With
    Next
    Set myFileSystemObject = Nothing
    Set myFolders = Nothing
    Set myFolder = Nothing
    Set myFile = Nothing
    Application.ScreenUpdating = True
End Sub


Gruß
Nepumuk
Anzeige
Super, aber noch eine Frage!
Oliver
Super Nepumuk,
der Fall ist gelöst. Genau das solte das amkro machen. Ich danke Dir für die schnelle und prompte Hilfe. Eine Frage hätte ich da aber noch. Besteht die Möglichkeit, dass in Spalte E in den Zeilen, in denen die Exceldateinamen und die kopierten Werte stehen, eine Nummerierung erfolgt? Also angefangen in der ersten Zeile mit Dateiname eine 1, dann eine 2 usw. Nur in den Zeilen, in denen der Verzeichnisname steht soll keine Nummerierung erfolgen. Geht so was? Wäre für Deine Hilfe dankbar.
Gruß,
Oliver
AW: Super, aber noch eine Frage!
Nepumuk
Hallo Oliver,
soll die Nummerierung bei jedem Verzeichnis neu beginnen, oder alle Dateien laufend durchnummeriert werden?
Gruß
Nepumuk
Anzeige
AW: Super, aber noch eine Frage!
Oliver
Hi Nepumuk,
wenn es Dir nicht zu viel Umstände bereitet, wäre es super, wenn ich beide Varianten, also einmal bei jeder Datei Neuanfang bei 1 und zum Anderen fortlaufend nummeriert, haben könnte. Ich weiß noch nicht genau, wie ich es im Enddefekt haben möchte.
Danke Dir,
Oliver
AW: Super, aber noch eine Frage!
Nepumuk
Hallo Oliver,
das geht so:


Public Sub Daten_kopieren3()
' benötigt Verweis auf Microsoft Scripting Runtime
    Dim myFileSystemObject As New FileSystemObject, myFolders As Folders, lngNummer As Long
    Dim myFolder As Folder, myFile As File, intIndex As Integer, lngZeile As Long
    Application.ScreenUpdating = False
    Range("A2:H65536").ClearContents
    lngZeile = 3
    Set myFolder = myFileSystemObject.GetFolder("E:\Testdatei\")
    Set myFolders = myFolder.SubFolders
    For Each myFolder In myFolders
        Cells(lngZeile, 1) = myFolder.Name
        lngZeile = lngZeile + 1
        With Application.FileSearch
            .LookIn = myFolder.Path
            .FileType = msoFileTypeExcelWorkbooks
            .Execute
            For intIndex = 1 To .FoundFiles.Count
                Set myFile = myFileSystemObject.GetFile(.FoundFiles(intIndex))
                lngNummer = lngNummer + 1
                Cells(lngZeile, 1) = lngNummer
                Cells(lngZeile, 2) = myFile.Name
                Cells(lngZeile, 3) = ExecuteExcel4Macro("'" & myFolder.Path & "\[" & myFile.Name & "]" & "Vorlage" & "'!" & Cells(4, 10).Address(ReferenceStyle:=xlR1C1))
                Cells(lngZeile, 4) = ExecuteExcel4Macro("'" & myFolder.Path & "\[" & myFile.Name & "]" & "Vorlage" & "'!" & Cells(5, 10).Address(ReferenceStyle:=xlR1C1))
                lngZeile = lngZeile + 1
            Next
        End With
        lngNummer = 0 'wenn fortlaufende Nummerierung gewünscht, dann diese Zeile auskommentieren
    Next
    Set myFileSystemObject = Nothing
    Set myFolders = Nothing
    Set myFolder = Nothing
    Set myFile = Nothing
    Application.ScreenUpdating = True
End Sub


Gruß
Nepumuk
Anzeige
Spitze, Danke!!
Oliver
Hi Nepumuk,
klasse, genau so sollte es sein. Ich bin begeistert. Muss nun erst einmal versuchen, den Code zu verstehen. Danke Dir, dass Du den Feiertagmorgen für mich geopfert hast.
Schönen Restfeiertag noch,
Oliver

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige