Excel Sheets auslesen

Soilder

Grünschnabel
Hi,
Ich hab mehrere Excel Arbeitsmappen, bei diesen würde ich gern auf einen Schlag alle Tabellennamen auslesen und in in eine neue Exceltabelle schreiben.
Ich kireg es via Makro hin, aber dazu müssen auch alle Arbeitsmappen geöffnet sein.
Gibt es hier eine Lösung in welcher nicht erst alle Dateien geöffnet werden müssen?
 
Im Hintergrund wird Excel schon geöffnet. Aber es muss ja nicht am Bildschirm aufpopen

Visual Basic:
' @param    iFilePath   Pfad der Exceldatei
' @return               Array mit den Sheetnamen der Exceldatei
Public Function readExcelSheetNames(ByVal iFilePath As String) As String()
On Error GoTo Err_Handler
    
    Dim myExcel As New excel.Application
    Dim myWorkbook As workbook
    Dim names() As String
    Dim i
    
    'Excel verstecken
    myExcel.Visible = False
    
    Set myWorkbook = myExcel.Workbooks.Open(iFilePath)
    ReDim names(myWorkbook.Sheets.Count - 1)
    
    For i = 0 To myWorkbook.Sheets.Count - 1
        names(i) = myWorkbook.Sheets(i + 1).name
    Next i
    
    readExcelSheetNames = names
    
Exit_Handler:
On Error Resume Next
    'Alle Objekte schliessen zerstören
    Call myWorkbook.Close
    Set myWorkbook = Nothing
    Call myExcel.Quit
    Set myExcel = Nothing
    
    Exit Function

Err_Handler:
    MsgBox Err.Description
    GoSub Exit_Handler
End Function

Und hier noch ein kleiner Test damit du siehst wie die Funktion angewendet wird
Visual Basic:
Public Sub testReadExcelSheetNames()
    Dim names() As String
    Dim i
    
    names = readExcelSheetNames("C:\temp\test.xls")
    
    For i = 0 To UBound(names)
        Debug.Print names(i)
    Next i


End Sub
 
Zuletzt bearbeitet:
Wenndu das Testscript mit einem Excelfile von dir laufen lässt, dann sollte nachher im Direktfenster die Namen ausgegeben werden.

Der Befehl Debug.Print() schreibt das dorthin...

Aus was lässt du das laufen? Excel-VBA? Access-VBA? VB6? VB-Script?
 
Ich hab es erst einmal in Excel-VBA probiert... müsste doch gehen oder?
Sorry wenn ich mich so dumm anstelle...
Ich habs es nicht so mit VB, befasse mich normal mit PHP/MySQL/CSS...
 
1) Also, geh ins VBA von Excel.
2) Kopiere beide Funktionen rein
3) ändere den Dateipfad in der Funktion testReadExcelSheetNames() auf einen Pfad der bei dir exisitert
4) Führe die sub testReadExcelSheetNames() aus
5) Schaue im Direktfenster (immediate-Window) die Ausgabe an. Wenn dieses nicht angezeigt eitd, blende es über den Menüpunkt Ansicht (View) ein
 
Code:
Public Sub testReadExcelSheetNames()
    Dim names() As String
    Dim i
   
    names = readExcelSheetNames("C:\temp\test.xls")
   
    For i = 0 To UBound(names)
        Debug.Print names(i)
    Next i
 
 
End Sub
Hab diesen Teil damit ersetzt somit schreibt es mir diese Ausgabe schön in eine Datei :)
Code:
   Public Sub testReadExcelSheetNames()
   Dim names() As String
   Dim i
   Dim strPath As String
   strPath = "C:\Ausgabe.txt" 
   names = readExcelSheetNames("C:\kopie.xls")

   Open strPath For Output As #1
   For i = 0 To UBound(names)
      Print #1, names(i)
   Next
   Close #1

Doch nun noch eine allerletzte Frage... Wie Kann ich mehrere Dateien definieren die ausgelesen werden sollen?
Also meine theoretische Vorstellung zu ist:
Alle Dateinamen in eine "Liste.txt" zuschreiben, welche durch ein Array eingelesen wird und und dann Arbeitsmappe für Arbeitsmappe abgearbeitet wird.
Des mit dem Array würde ich vlt hinbekommen... aber wie öffne ich die "Ausgabe.txt" und ergänze darin die Einträge ohne diese zu überschreiben?

Code:
Dim Arr()
    For X = 1 To 50
        ReDim Preserve Arr(X)
        Arr(X) = Range("A" & X)
    Next X
        For X = 1 To UBound(Arr)
        Debug.Print Arr(X)
    Next X

Damit lese ich dir Werte(Pfade) in der dem bereich A1:A50 ein.
Jetzt muss ich des nur noch verarbeiten können woran es bei mir aber scheitert... :(
 
Zuletzt bearbeitet:
So also ich komme nicht wirklich vorwärts... :(.
Wie kann ich es realisieren dass mehrere Dateien nacheinander ausgelesen werden?
Also ich schreibe in der Tabelle in die Zellen A1-A10 Pfade diese werden auch ausgelesen und entsprechend verarbeitet.
Ich kireg nur dass auslesen der Pfade mit einem For-Schleife hin... Kann mir jemand helfen?
Bin echt am verzweifeln..

Gruß
 
Zurück