Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Dateien Konsolidieren

Betrifft: Dateien Konsolidieren von: Fabian Pennart
Geschrieben am: 24.07.2014 13:10:22

Hallo zusammen,

ich benutze ein Makro um Dateien in einer "Masterfile" zu konsolidieren. Die Dateien sind alle gleich aufgebaut beinhalten aber verschiedene Daten.

Ich nutze folgendes Makro:

Sub Zusammenführen()
    Dim i               As Long
    Dim sPfad           As String
    Dim sDatei          As String
    Dim vFileToOpen     As Variant
    Dim lngLZ           As Long
    Dim blnÜberschrift  As Boolean
    Dim iCalc           As Integer

    
    vFileToOpen = Application.GetOpenFilename("Excel Files (*.xls*), *.xls*", , , , True)
    If Not IsArray(vFileToOpen) Then Exit Sub
    
        
    iCalc = Application.Calculation

    On Error GoTo ENDE:
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    
    
    For i = 1 To UBound(vFileToOpen)
        sDatei = Dir(vFileToOpen(i))
        sPfad = Left(vFileToOpen(i), InStr(vFileToOpen(i), sDatei) - 1)
        
        With Tabelle1.Range("A1")
            .Formula = "=LOOKUP(2,1/('" & sPfad & "[" & sDatei & "]Tabelle1'!$A:$A<>""""),ROW('" _
 _
 & sPfad & "\[" & sDatei & "]Tabelle1'!$A:$A))"
            lngLZ = .Value
        End With
        
        With Tabelle1
            If blnÜberschrift Then
                .Cells(.Rows.Count, 1).End(xlUp).Offset(1).Resize(lngLZ - 1, 7).Formula = _
                "='" & sPfad & "[" & sDatei & "]Tabelle1'!A2"
            Else
                blnÜberschrift = True
                .Cells(.Rows.Count, 1).End(xlUp).Offset(1).Resize(lngLZ, 7).Formula = _
                "='" & sPfad & "[" & sDatei & "]Tabelle1'!A1"
            End If
        End With
        
        Call StatusBalken(Int((i / UBound(vFileToOpen)) * 100))
    Next
    
    With Tabelle1.UsedRange
        .Copy
        .PasteSpecial xlPasteValues
        .Rows(1).Delete
    End With
    
ENDE:
    Application.EnableEvents = True
    Application.Calculation = iCalc
    Application.ScreenUpdating = True
    If Err Then MsgBox Err.Description, , "Fehler: " & Err
End Sub

Starte ich die Konsolidierung mit Dateien von meinem Desktop, läuft das Makro wunderbar und ich habe keien Probleme.

Nun möchte ich aber die Dateien aus einem Ordner aus dem Netzwerk holen. Ich habe alle Zugriffe und den Pfad habe ich vorher "gemapt"

Trotzdem kommt dabei immer: Fehler 52 Bad file name or number.

Hat jemand eine Idee wie ich diesen Fehler eliminieren kann?

Vielen Dank im Voraus
Fabian

  

Betrifft: AW: Dateien Konsolidieren von: Born
Geschrieben am: 29.07.2014 10:51:41

Hallo Fabian,
lass mal das Makro im Einzelschritt-Modus durchlaufen. In welcher Zeile kommt dann der Fehler?

Viele Grüße,
M. Born


  

Betrifft: AW: Dateien Konsolidieren von: Fabian Pennart
Geschrieben am: 29.07.2014 11:07:05

Hi M.Born

die Fehler kommt im Teil:

For i = 1 To UBound(vFileToOpen)
sDatei = Dir(vFileToOpen(i))
sPfad = Left(vFileToOpen(i), InStr(vFileToOpen(i), sDatei) - 1)

nach sDatei = Dir(vFileToOpen(i))

Beste Grüße
Fabian


  

Betrifft: AW: Dateien Konsolidieren von: Born
Geschrieben am: 29.07.2014 11:17:13

Versuche mal, mit dem Debugger Dir den Wert von sDatei anzeigen zu lassen. Dort sollte der Pfadname drinstehen. Wenn die Variable keinen String enthält, dann erzeugt die Instr() eine Fehlermeldung.


  

Betrifft: AW: Dateien Konsolidieren von: Fabian Pennart
Geschrieben am: 29.07.2014 12:31:31

Hatte jetzt einen Watch sowohl auf sDatei als auch sPfad. In der Tat, werden die Werte über das gemappte Netzwerk nicht an sDatei und sPfad übergeben. Wenn ich alles auf meinem Desktop liegen habe klappt es nach wie vor wunderbar.

Gibt es irgendeinen Möglichkeit dieses Problem zu umgehen/zu lösen?

Wie ich in meinem ersten Beitrag geschrieben habe habe ich alle Berechtigungen und Möglichkeiten aufn dieses Netzwerkordner zuzugreifen.


  

Betrifft: AW: Dateien Konsolidieren von: Born
Geschrieben am: 29.07.2014 13:06:59

Du kannst bei Application.GetOpenFilename noch eine Prüfung einbauen, dass der Wert ungleich False ist. Nur wenn dort auf "Öffnen" geklickt wird, wird ein String (oder ein Array von Strings) zurückgeliefert, mit denen Du weiterarbeiten kannst.


  

Betrifft: AW: Dateien Konsolidieren von: Fabian Pennart
Geschrieben am: 29.07.2014 13:27:17

Ich öffne aber immer die gleichen Excel Files. Das Problem scheint also daran zu liegen, dass ich diese aus dem Netzwerk öffnen möchte.

Gibt es dafür irgendwas spezielles? Ich will das Makro ja nicht beenden ohne die Dateien importiert zu haben


  

Betrifft: AW: Dateien Konsolidieren von: Born
Geschrieben am: 29.07.2014 14:21:12

Du könntest alternativ die Datei(en) über Application.Dialogs(xlDialogOpen).Show öffnen, den Namen und Pfad über ActiveWorkbook.Path ermitteln und sie dann wieder schließen.

Das Öffnen von Dateien vom Netz sollte sich gegenüber dem von lokalen Dateien nicht unterscheiden.


  

Betrifft: AW: Dateien Konsolidieren von: Fabian Pennart
Geschrieben am: 29.07.2014 16:24:32

Ich kann aber ja schlecht 200 Datein (Das ist ungefähr die Zahl die am Ende gemerged werden soll) öffnen, mir Pfad und Dateinamen merken und die Dateien wieder schließen. Glaube da stürzt jeder PC ab.

So geht es wunderbar ohne die Files zu öffnen. Ich komme einfach nicht dahinter warum die Dateinamen nicht übergeben werden wenn ich es über das Netzwerklaufwerk versuche...


  

Betrifft: AW: Dateien Konsolidieren von: Born
Geschrieben am: 29.07.2014 16:31:38

Eine andere Möglichkeit fällt mir leider auch nicht ein. Ich lasse den Thread mal offen. Viel Erfolg...


 

Beiträge aus den Excel-Beispielen zum Thema "Dateien Konsolidieren"