tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
17
ZUGRIFFE
1409
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Soilder Soilder ist offline Mitglied
    Registriert seit
    Dec 2008
    Beiträge
    18
    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?
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Im Hintergrund wird Excel schon geöffnet. Aber es muss ja nicht am Bildschirm aufpopen

    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    ' @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
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    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
    Geändert von Yaslaw (07.07.10 um 10:18 Uhr)
    Soilder bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    Soilder Soilder ist offline Mitglied
    Registriert seit
    Dec 2008
    Beiträge
    18
    Vielen Dank! Aber da wird nichts geschrieben?! Oder mach ich grad was falsch?
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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?
    Soilder bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  5. #5
    Soilder Soilder ist offline Mitglied
    Registriert seit
    Dec 2008
    Beiträge
    18
    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...
     

  6. #6
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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
    Soilder bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  7. #7
    Soilder Soilder ist offline Mitglied
    Registriert seit
    Dec 2008
    Beiträge
    18
    Des mit dem Direktfenster wars wohl... . Vielen Dank!
     

  8. #8
    Soilder Soilder ist offline Mitglied
    Registriert seit
    Dec 2008
    Beiträge
    18
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
       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 :
    1
    2
    3
    4
    5
    6
    7
    8
    
    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...
    Geändert von Soilder (07.07.10 um 15:34 Uhr)
     

  9. #9
    Soilder Soilder ist offline Mitglied
    Registriert seit
    Dec 2008
    Beiträge
    18
    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ß
     

  10. #10
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Kombiniere deine Schleife mit dem Testaufruf testReadExcelSheetNames()
    Soilder bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  11. #11
    Soilder Soilder ist offline Mitglied
    Registriert seit
    Dec 2008
    Beiträge
    18
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    Public Sub testReadExcelSheetNames()
        Dim names() As String
        Dim I
        Dim a
        Dim myExcel As New Excel.Application
        Dim myWorkbook As New Workbook
        Dim arbeitsmappe() As String
        strPath = "C:\Ausgabe.txt" 'ausgabe Pfad definieren
     
        Dim Arr()
            For X = 1 To 10
                 ReDim Preserve Arr(X)
                 Arr(X) = Range("A" & X)
                 zaehler = c + 1
                 Debug.Print Arr(X)
     
                names = readExcelSheetNames(Arr(X))
     
            Next X
                
    End Sub
    Hier werden die Pfade eingelesen, des passt soweit, doch ich komm nicht drauf wie ich des mit dem schreiben machen soll... wie Schleifen kombinieren? Hat bei mir gar nicht geklappt... Muss ich dabei was besonderes beachten?
    Code :
    1
    2
    3
    4
    5
    
               Open strPath For Output As #1
               For I = 0 To UBound(names)
               Print #1, names(I)
               Next I
               Close #1
     

  12. #12
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Die folgende Reihenfolge sollte gehen

    Öffnen der Ausgabedatei
    Schleife über alle Einträge
    -- auslesen der Namen
    -- Schleife über alle namen
    -- -- mit Print #1 der Daei hinzufügen
    -- Namensschleife schliessen
    Eintragsschleife schliessen
    Datei schliessen
    Soilder bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  13. #13
    Soilder Soilder ist offline Mitglied
    Registriert seit
    Dec 2008
    Beiträge
    18
    Ich hab schon einiges ausprobioert, aber ich krieg es einfach nicht hin , ich stell mich wohl zu blöd an...

    Und egal wie ich es mach krieg ich immer 'Laufzeitfehler 9' Index ausserhalb des gültigkeitsbereiches
    Geändert von Soilder (08.07.10 um 13:42 Uhr)
     

  14. #14
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Habs nicht getestet. Aber das ist das was ich dir oben beschrieben habe
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    Public Sub testReadExcelSheetNames()
        Dim i, j
        strPath = "C:\Ausgabe.txt" 'ausgabe Pfad definieren
     
        Open strPath For Output As #1
        For i = 1 To 10
            names = readExcelSheetNames(Range("A" & i))
            For j = 0 To UBound(names)
                Print #1, names(j)
            Next j
     
        Next i
        Close #1
    End Sub
    Soilder bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  15. #15
    Soilder Soilder ist offline Mitglied
    Registriert seit
    Dec 2008
    Beiträge
    18
    Tausend Dank für deine Hilfe! Es klappt .
    Geändert von Soilder (08.07.10 um 15:01 Uhr)
     

Ähnliche Themen

  1. [Excel/VBA] Dynamisch Hyperlinks zu Sheets erstellen
    Von timgkeller im Forum Office-Anwendungen
    Antworten: 3
    Letzter Beitrag: 03.09.08, 09:16
  2. ASP.NET, C#: Excel Sheets einlesen und wieder exportieren
    Von silmepurpurdrache im Forum .NET Web und Kommunikation
    Antworten: 5
    Letzter Beitrag: 28.08.07, 19:36
  3. Spalten- und Zeilen Anzahl eines Excel Sheets auslesen ?
    Von maybebaby im Forum Visual Basic 6.0
    Antworten: 8
    Letzter Beitrag: 08.06.07, 10:58
  4. VBA Excel - Mehrere Sheets kopieren
    Von Doni im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 23.12.04, 17:09
  5. Selektierte Excel-Sheets per Email verschicken
    Von El Schorero im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 13.05.04, 15:15