Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1504to1508
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

VBA: Verweis auf unben. Worksheets, Datei geschl.

VBA: Verweis auf unben. Worksheets, Datei geschl.
25.07.2016 13:20:26
Daniel
Hallo werte Community,
In meiner Not muss ich aufgrund mangelnder VBA-Erfahrung leider um eure Hilfe bitten:
Ich schreibe momentan meine Bachelorthesis und stehe dabei vor folgendem Problem. Für eine Altdatenanalyse würde ich gerne aus verschiedenen Excel-Dateien, die sich alle in einem Ordner befinden, bestimmte Zelleinträge aus bestimmten Datenblättern in eine Tabelle kopieren. Wie das aber mit Daten, die von verschiedenen Bearbeitern gepflegt werden, wohl oft der Fall ist, sind einige der Datenblätter leider umbenannt worden. Wäre dies nicht der Fall, so würde mir folgendes Script, das ich aus verschiedenen anderen Recherchen zusammengekratzt habe, weiterhelfen:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************
Option Explicit

Sub Altdatenanalyse()
Dim strPath As String, strFile As String, strTabName As String
Dim lngR As Long
strPath = "D:\Pfad\"
strFile = Dir(strPath & "*.xls")
lngR = 1
With ThisWorkbook.Sheets("Sheet1")
.Range("A2:B" & Rows.Count).ClearContents
Do Until strFile = ""
lngR = lngR + 1
.Cells(lngR, 1) = strFile
.Cells(lngR, 2).Formula = "='" & strPath & "[" & strFile & "]Pr1'!$AO$4"
.Cells(lngR, 2) = .Cells(lngR, 2).Value
strFile = Dir
Loop
End With
End Sub

Leider ist sind einige Datenblätter von "Pr1" in andere Dateinamen umbenannt worden, daher bleibt das Script immer hängen sobald kein Datenblatt "Pr1" gefunden wird. Mittlerweile habe ich die Referenzierung über Code Name oder Index Nummer kennengelernt, habe aber leider nicht genug Erfahrung um zu wissen, wie ich diese syntaktisch korrekt in obiges Script einbauen könnte. (Die CodeNamen der betroffenen Datenblätter in jeder Datei sind "Tabelle 12, ...15,16,17,18,19,20,21,22,24", die Index-Nummern 5-14. (Hoffentlich in allen Dateien, in den von mir geprüften hat es gestimmt)
Da es sich um einige Hundert Dateien handelt, wäre es super wenn es eine Lösung für mein Problem gibt. Kennt einer von euch die richtige Nutzung von bevorzugt dem Code Namen in diesem Zusammenhang? Ich hoffe dass alle benötigten Daten/Informationen vorhanden sind.
Freundliche Grüße und Danke,
Daniel

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Verweis auf unben. Worksheets, Datei geschl.
25.07.2016 13:44:29
Fennek
Hallo Daniel,
es gibt 3 gleichwertige Methoden ein Arbeitsblatt anzusprechen: Sheet-Namen, Index, Codename.
Nach deinem Text sollte eine Referenzierung mit dem CodeName klappen (da "Laien" den nicht ändern)
Anstelle sheets("Tabelle1") einfach
Tabelle1.cells(...)
mfg
AW: VBA: Verweis auf unben. Worksheets, Datei geschl.
25.07.2016 14:08:22
Daniel
Hallo Fennek,
könntest du vielleicht kurz in dem von mir geposteten Code angeben, wo du "Tabelle1.cells(...)" einbauen würdest, und was genau in die Klammern kommt?
Du hast "Anstelle sheets("Tabelle1")" geschrieben, was sich meinem Verständnis nach auf folgenden Teil des Codes bezieht:
With ThisWorkbook.Sheets("Sheet1")
meinem Verständnis nach wird hier aber nur der Platz definiert, an dem die Liste generiert wird - das passt soweit alles.
Das Problem taucht an folgender Stelle auf:
With ThisWorkbook.Sheets("Sheet1")
.Range("A2:B" & Rows.Count).ClearContents
Do Until strFile = ""
lngR = lngR + 1
.Cells(lngR, 1) = strFile
        .Cells(lngR, 2).Formula = "='" & strPath & "[" & strFile & "]Pr1'!$AO$4"
.Cells(lngR, 2) = .Cells(lngR, 2).Value
strFile = Dir
Loop
End With
Der Sheetname "Pr1" in der Formel ist leider teilweise umbenannt. Die Formel bräuchte also einen dynamischen Verweis via Code-Name. Falls du genau das gemeint hast, könntest du "Tabelle1.cells(...)" vielleicht kurz syntaktisch richtig einfügen? Ich habe leider kaum Erfahrung mit VBA, daher tue ich mich leider sehr schwer.
Danke dir für die schnelle Antwort!
Grüße,
Daniel
Anzeige
AW: VBA: Verweis auf unben. Worksheets, Datei geschl.
25.07.2016 13:59:38
UweD
Hallo
wenn der Index des Tabellenblattes "PR1" immer gleich ist (z.B. immer das 2. Blatt in der Datei) dann könnte es so gehen.
Zur Ermittlung des Namen wird die Datei kurz geöffnet
Option Explicit 
 
Sub Altdatenanalyse() 
 
    Dim strPath As String, strFile As String, intIndex As Integer 
    Dim strTabName As String, lngR As Long, Wb As Workbook 
     
    strPath = "D:\Pfad\" 
    strFile = Dir(strPath & "*.xls") 
     
    intIndex = 2 'Beispiel für die Nr. des Tabellenblattes Pr1 
     
    lngR = 1 
     
    With ThisWorkbook.Sheets(1) 
         
        .Range("A2:B" & Rows.Count).ClearContents 
         
        Do Until strFile = "" 
            Set Wb = Workbooks.Open(strPath & strFile) 
            If Wb.Sheets.Count < intIndex Then 
                MsgBox "Fehler Blattanzahl in: ''" & Wb.Name & "''" 
                Exit Sub 
            Else 
                strTabName = Wb.Sheets(intIndex).Name 
            End If 
            Wb.Close False 
            lngR = lngR + 1 
            .Cells(lngR, 1) = strFile 
            .Cells(lngR, 2).Formula = "='" & strPath & "[" & strFile & "]" _
                & strTabName & "'!$AO$4" 
            .Cells(lngR, 2) = .Cells(lngR, 2).Value 
            strFile = Dir 
        Loop 
         
    End With 
 
End Sub 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0


Gruß UweD
Anzeige
AW: VBA: Verweis auf unben. Worksheets, Datei geschl.
25.07.2016 14:23:02
UweD
Wenn die Datei ja sowiso geöffnet wird, kann der Umweg über die Formel entfallen und der Wert selbst gelesen werden
Option Explicit 
 
Sub Altdatenanalyse() 
 
    Dim strPath As String, strFile As String, intIndex As Integer 
    Dim strTabName As String, lngR As Long, Wb As Workbook 
     
    strPath = "D:\Pfad\" 
    strPath = "C:\Temp\" 
    strFile = Dir(strPath & "*.xls") 
     
    intIndex = 2 'Beispiel für die Nr. des Tabellenblattes Pr1 
     
    lngR = 1 
     
    With ThisWorkbook.Sheets(1) 
         
        .Range("A2:B" & Rows.Count).ClearContents 
         
        Do Until strFile = "" 
            Set Wb = Workbooks.Open(strPath & strFile) 
            If Wb.Sheets.Count < intIndex Then 
                MsgBox "Fehler Blattanzahl in: ''" & Wb.Name & "''" 
                Exit Sub 
            End If 
            lngR = lngR + 1 
            .Cells(lngR, 1) = strFile 
            .Cells(lngR, 2) = Wb.Sheets(intIndex).Range("$AO$4") 
            Wb.Close False 
            strFile = Dir 
        Loop 
         
    End With 
 
End Sub 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0


Anzeige
AW: VBA: Verweis auf unben. Worksheets, Datei geschl.
25.07.2016 14:49:09
Daniel
Hallo Uwe,
Vielen Dank dir! Der Fehler lag natürlich an meinem Ende, trotz mehrfacher Überprüfung habe ich im Pfad eine Endung übersehen (Dateiname war "Auslegungen", nicht "Auslegung"..)
Dann informier ich mich mal, wie ich das Öffnen der Dateien noch vereinfachen kann (Verknüpfungen nicht aktualisieren etc), aber das bekomm ich hoffentlich selber hin.
Liebe Grüße und Danke,
Daniel
AW: VBA: Verweis auf unben. Worksheets, Datei geschl.
25.07.2016 14:38:27
Daniel
Hallo Uwe,
Vielen Dank dir für die Antwort! Das Sieht doch (für mich) schonmal nach dem richtigen Weg aus. Nur leider funktioniert es (bei mir) nicht. Das Makro startet (clearContents funktioniert zum Beispiel), aber irgendwo scheint sich ein Fehler eingeschlichen zu haben. Es kommt keine Fehlermeldung, aber Daten liefert mir das Makro leider nicht (nicht einmal der Dateiname wird eingetragen, was ja bereits vor der Formel geschieht).
Kann es eventuell sein, dass durch das Öffnen des Arbeitsblattes die Daten dort eingetragen werden? Das sollte mit "ThisWorkbook" ja eigentlich ausgeschlossen sein. Ansonsten fällt mir aktuell keine Erklärung des Problemes ein, außer dass die Schleife anscheinend durch irgendetwas undefiniertes abgebrochen wird. Dir vielleicht?
Liebe Grüße,
Daniel
Anzeige

310 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige