Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: öffnen, aktualisieren, speichen, schließen

öffnen, aktualisieren, speichen, schließen
01.04.2008 21:12:00
wossi
Hallo Leute,
folgendes möchte ich bewirken. bei click auf einen Button, soll sich ein Fenster(Verzeichnisbaum) öffnen, ich wähle mir ein Verzeichnis aus, und nun sollen alle Dateien darin nacheinander geöffnet, verknüpfungen etc. aktualisiert werden, speichern und wieder schließen.
Habe in dem FAQ hier auch was gefunden, weiß nur nicht wie ich s zusammenbringe....
Verzeichnis auswählen:
StandardModule: basMain
Option Private Module
Public Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
Declare

Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Declare 

Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long


Sub DirAuswahl()
Dim sMsg As String, sPath As String
sMsg = "Wählen Sie bitte einen Ordner aus:"
sPath = getdirectory(sMsg)
If sPath  "" Then MsgBox sPath
End Sub



Function getdirectory(Optional msg) As String
Dim bInfo As BROWSEINFO
Dim Path As String
Dim r As Long, x As Long, pos As Integer
bInfo.pidlRoot = 0&
If IsMissing(msg) Then
bInfo.lpszTitle = "Wählen Sie bitte einen Ordner aus."
Else
bInfo.lpszTitle = msg
End If
bInfo.ulFlags = &H1
x = SHBrowseForFolder(bInfo)
Path = Space$(512)
r = SHGetPathFromIDList(ByVal x, ByVal Path)
If r Then
pos = InStr(Path, Chr$(0))
getdirectory = Left(Path, pos - 1)
Else
getdirectory = ""
End If
End Function


öfnnen, aktualissieren, speichern, schließen:
StandardModule: Modul1


Sub OeffnenSchliessen()
Dim iRow As Integer
Dim sFile As String
On Error GoTo ERRORHANDLER
Application.ScreenUpdating = False
Application.EnableEvents = False
iRow = 1
Do Until IsEmpty(Cells(iRow, 1))
sFile = Cells(iRow, 1).Value
If Dir(sFile)  "" Then
Workbooks.Open _
Filename:=sFile, _
updatelinks:=True
ActiveWorkbook.Close savechanges:=True
End If
iRow = iRow + 1
Loop
ERRORHANDLER:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub


Kann mir jemand helfen, das so zusammen zubringen, dass es nach meinen Vorstellungen funktioniert?
Besten Dank.
Gruß
wossi

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: öffnen, aktualisieren, speichen, schließen
02.04.2008 10:15:00
UweD
Hallo
ich mach das so:


      
Sub alle_Dateien_Verzeichnis() '
    Dim dlg As FileDialog
    
Dim Si, Ext$, Datei$
    
Set dlg = Application.FileDialog(msoFileDialogFolderPicker) 'Verzeichnis wählen
    If dlg.Show = True Then
        
For Each Si In dlg.SelectedItems 'Die Abfrage für den selektierten Eintrag
            Ext = "*.xls"       'Dateiextension ggf. anpassen
            Datei = Dir(Si & "\" & Ext)
            
Do
                Workbooks.Open FileName:=Si & 
"\" & Datei
                
'mach was damit
                Workbooks(Datei).Close SaveChanges:=True
                Datei = Dir() 
' nächste Datei
            Loop While Len(Datei) > 0
        
Next
    
End If
End Sub 


Gruß UD

Anzeige
AW: öffnen, aktualisieren, speichen, schließen
02.04.2008 20:14:08
wossi
HAllo Uwe,
danke dafür. ICh werde es gleich mal ausprobieren.
Gruß,
wossi
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Automatisierung von Excel: Dateien öffnen, aktualisieren, speichern und schließen


Schritt-für-Schritt-Anleitung

  1. Verzeichnis auswählen: Nutze den folgenden VBA-Code, um ein Verzeichnis auszuwählen. Füge diesen Code in ein Standardmodul in Excel ein:

    Option Private Module
    Public Type BROWSEINFO
       hOwner As Long
       pidlRoot As Long
       pszDisplayName As String
       lpszTitle As String
       ulFlags As Long
       lpfn As Long
       lParam As Long
       iImage As Long
    End Type
    
    Declare Function SHGetPathFromIDList Lib "shell32.dll" _
       Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
    Declare Function SHBrowseForFolder Lib "shell32.dll" _
       Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
    
    Function getdirectory(Optional msg) As String
       Dim bInfo As BROWSEINFO
       Dim Path As String
       Dim r As Long, pos As Integer
       bInfo.pidlRoot = 0
       If IsMissing(msg) Then
           bInfo.lpszTitle = "Wählen Sie bitte einen Ordner aus."
       Else
           bInfo.lpszTitle = msg
       End If
       bInfo.ulFlags = &H1
       r = SHBrowseForFolder(bInfo)
       Path = Space$(512)
       If r Then
           pos = InStr(Path, Chr$(0))
           getdirectory = Left(Path, pos - 1)
       Else
           getdirectory = ""
       End If
    End Function
  2. Dateien öffnen und bearbeiten: Füge den folgenden Code in ein weiteres Modul ein, um alle Dateien im gewählten Verzeichnis zu öffnen, Links zu aktualisieren, zu speichern und zu schließen:

    Sub OeffnenSchliessen()
       Dim iRow As Integer
       Dim sFile As String
       On Error GoTo ERRORHANDLER
       Application.ScreenUpdating = False
       Application.EnableEvents = False
       iRow = 1
       Do Until IsEmpty(Cells(iRow, 1))
           sFile = Cells(iRow, 1).Value
           If Dir(sFile) <> "" Then
               Workbooks.Open Filename:=sFile, UpdateLinks:=True
               ActiveWorkbook.Close SaveChanges:=True
           End If
           iRow = iRow + 1
       Loop
    ERRORHANDLER:
       Application.EnableEvents = True
       Application.ScreenUpdating = True
    End Sub
  3. Führe die Makros aus: Starte das Makro DirAuswahl, um das Verzeichnis auszuwählen, und dann das Makro OeffnenSchliessen, um alle Dateien zu öffnen und zu schließen.


Häufige Fehler und Lösungen

  • Fehler: "Datei nicht gefunden": Stelle sicher, dass der Pfad zur Datei korrekt ist. Überprüfe, ob die Datei existiert und ob der Pfad in der Zelle korrekt angegeben ist.

  • Fehler: "Makros sind deaktiviert": Aktiviere die Makros in Excel. Gehe zu „Datei“ > „Optionen“ > „Trust Center“ > „Einstellungen für das Trust Center“ > „Makroeinstellungen“ und aktiviere die Option „Alle Makros aktivieren“.


Alternative Methoden

Eine alternative Methode zur Auswahl eines Verzeichnisses ist die Verwendung des FileDialog-Objekts:

Sub alle_Dateien_Verzeichnis()
    Dim dlg As FileDialog
    Dim Si As Variant, Ext As String, Datei As String
    Set dlg = Application.FileDialog(msoFileDialogFolderPicker)
    If dlg.Show = True Then
        For Each Si In dlg.SelectedItems
            Ext = "*.xls" 'Dateiextension ggf. anpassen
            Datei = Dir(Si & "\" & Ext)
            Do While Len(Datei) > 0
                Workbooks.Open FileName:=Si & "\" & Datei
                Workbooks(Datei).Close SaveChanges:=True
                Datei = Dir()
            Loop
        Next
    End If
End Sub

Praktische Beispiele

  • Beispiel 1: Verwende die OeffnenSchliessen-Subroutine, um eine Liste von Excel-Dateien in einem bestimmten Verzeichnis zu aktualisieren. Lege die Dateipfade in Spalte A deiner Arbeitsmappe ab.

  • Beispiel 2: Kombiniere beide Methoden, um eine benutzerfreundliche Lösung zur Auswahl und Verarbeitung von Dateien zu erstellen.


Tipps für Profis

  • Verwende Fehlerbehandlung: Implementiere On Error Resume Next, um Fehler zu ignorieren, die durch das Schließen von bereits geschlossenen Dateien entstehen.

  • Optimierung: Füge Application.DisplayAlerts = False hinzu, um Warnmeldungen beim Speichern von Änderungen zu unterdrücken.


FAQ: Häufige Fragen

1. Wie kann ich das Makro so anpassen, dass es nur bestimmte Dateitypen öffnet?
Du kannst die Variable Ext in der alle_Dateien_Verzeichnis-Subroutine anpassen, um die gewünschten Dateitypen festzulegen, z. B. Ext = "*.xlsx".

2. Ist VBA in Excel für Mac verfügbar?
Ja, jedoch gibt es einige Unterschiede in der Funktionsweise von VBA auf Mac-Systemen im Vergleich zu Windows.

3. Wie kann ich sicherstellen, dass alle Dateien erfolgreich gespeichert werden?
Füge eine Erfolgsmeldung nach dem Speichern jeder Datei hinzu, um sicherzustellen, dass alle Änderungen korrekt übernommen wurden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige