Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1196to1200
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
Problem mit "Workbook_BeforeClose"
Harald
Hallo zusammen,
weiß jemand warum der folgende Code zum Öffnen einer bestimmten Datei im

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Workbooks.Open Filename:="C:\Test\TESTDATEI.xls", UpdateLinks:=3 End Sub nicht funktioniert?
Gruß, Harald

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Problem mit "Workbook_BeforeClose"
20.01.2011 20:14:37
Nepumuk
Hallo,
was funktioniert daran nicht?
Gruß
Nepumuk
OT @Nepumuk, Dateien suchen
20.01.2011 20:52:07
Tino
Hallo Nepumuk,
ich verwende einen etwas abgeänderten Code von Dir um Dateien zu suchen
weil dieser Code sehr schnell ist.
Auf manschen Rechnern mit Win- XP funktioniert dieser Code aber leider nicht.
Es kommt kein Fehler,
es wird aber auch keine Datei gefunden auch wenn diese definitiv vorhanden sind.
Wiederrum auf anderen Rechnern geht dieser Code super, ob XP, Vista o. Win7.
Hast Du vielleicht eine Erklärung dafür und evtl. eine alternative die genauso schnell ist.
kommt als Code in Modul1
Option Explicit 
  
Public Sub Start() 
Dim strFolder As String, sString As String, FileFilter$, ArFileFilter() 
Dim nCount As Long, lngFilecount As Long 
Dim ArrayData() 
  
  
With Tabelle1 
    'Tabelle leer machen für neue Daten 
    .Range("A2", .Cells(.Rows.Count, 1)).ClearContents 
      
    ArFileFilter = Array("*.pdf", "*.jpg", "*.msg", "*.xls") 'Filter für die Suche 
      
    strFolder = OrdnerAuswahl("G:\") 'hier der Pfad aus B1 
      
    If strFolder <> "" Then 
        strFolder = IIf(Right$(strFolder, 1) = "\", strFolder, strFolder & "\") 
        FindFiles ArrayData, strFolder, lngFilecount, ArFileFilter, True 
    End If 
      
    If lngFilecount > 0 Then 
        .Range("A2").Resize(lngFilecount, 1) = Application.Transpose(ArrayData) 
    End If 
End With 
Erase ArrayData 
End Sub 
  
 
kommt als Code in Modul2
Option Explicit 
 
'Teile des Originalcode von Nepumuk. *********************************************************** 
  
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" ( _
    ByVal lpFileName As String, _
    lpFindFileData As WIN32_FIND_DATA) As Long 
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" ( _
    ByVal hFindFile As Long, _
    lpFindFileData As WIN32_FIND_DATA) As Long 
Private Declare Function FindClose Lib "kernel32" ( _
    ByVal hFindFile As Long) As Long 
  
Private Const INVALID_HANDLE_VALUE = -1& 
Private Const MAX_PATH = 260& 
  
Private Type FILETIME 
    dwLowDateTime As Long 
    dwHighDateTime As Long 
End Type 
  
Private Enum FILE_ATTRIBUTE 
    FILE_ATTRIBUTE_READONLY = &H1 
    FILE_ATTRIBUTE_HIDDEN = &H2 
    FILE_ATTRIBUTE_SYSTEM = &H4 
    FILE_ATTRIBUTE_DIRECTORY = &H10 
    FILE_ATTRIBUTE_ARCHIVE = &H20 
    FILE_ATTRIBUTE_NORMAL = &H80 
    FILE_ATTRIBUTE_TEMPORARY = &H100 
End Enum 
  
Private Type WIN32_FIND_DATA 
    dwFileAttributes As Long 
    ftCreationTime As FILETIME 
    ftLastAccessTime As FILETIME 
    ftLastWriteTime As FILETIME 
    nFileSizeHigh As Long 
    nFileSizeLow As Long 
    dwReserved0 As Long 
    dwReserved1 As Long 
    cFileName As String * MAX_PATH 
    cAlternate As String * 14 
End Type 
  
'Ordner Dialog 
Public Function OrdnerAuswahl(Optional ByVal sPath As String = "C:\") 
Dim strOrdner As String 
With Application.FileDialog(msoFileDialogFolderPicker) 
    .InitialFileName = sPath 
    .Title = "Ordnerauswahl" 
    .ButtonName = "Auswahl..." 
    .InitialView = msoFileDialogViewList 
    If .Show = -1 Then 
        strOrdner = .SelectedItems(1) 
        If Right(strOrdner, 1) <> "\" Then strOrdner = strOrdner & "\" 
    Else 
        strOrdner = "" 
    End If 
End With 
OrdnerAuswahl = strOrdner 
End Function 
  
Sub FindFiles(ArrayData(), ByVal strFolderPath As String, _
        ByRef lngFilecount As Long, ArFileFilter, Optional SubFolder As Boolean = True) 
    Dim WFD As WIN32_FIND_DATA, lngSearch As Long, strDirName As String 
      
    lngSearch = FindFirstFile(strFolderPath & "*.*", WFD) 
      
    If lngSearch <> INVALID_HANDLE_VALUE Then 
        GetFilesInFolder ArrayData, strFolderPath, lngFilecount, ArFileFilter 
        Do 
            If (WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) Then 
                strDirName = Left$(WFD.cFileName, InStr(WFD.cFileName, Chr(0)) - 1) 
                If SubFolder = False Then Exit Sub 'ohne Unterordner 
                If (strDirName <> ".") And (strDirName <> "..") Then _
                    FindFiles ArrayData, strFolderPath & strDirName & "\", lngFilecount, ArFileFilter 
            End If 
        Loop While FindNextFile(lngSearch, WFD) 
        FindClose lngSearch 
    End If 
End Sub 
  
Sub GetFilesInFolder(ArrayData(), ByVal strFolderPath As String, _
        ByRef lngFilecount As Long, ArFileFilter) 
Dim WFD As WIN32_FIND_DATA, lngSearch As Long, strFileName As String 
Dim FileFilter 
  
For Each FileFilter In ArFileFilter 
    lngSearch = FindFirstFile(strFolderPath & FileFilter, WFD) 
    If lngSearch <> INVALID_HANDLE_VALUE Then 
        Do 
            If (WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) <> _
                FILE_ATTRIBUTE_DIRECTORY Then 
                strFileName = Left$(WFD.cFileName, InStr(WFD.cFileName, Chr(0)) - 1) 
                Redim Preserve ArrayData(lngFilecount) 
                ArrayData(lngFilecount) = strFolderPath & strFileName 'auflisten in Zelle 
                lngFilecount = lngFilecount + 1 
            End If 
        Loop While FindNextFile(lngSearch, WFD) 
        FindClose lngSearch 
    End If 
Next 
End Sub 
 
Gruß Tino
Anzeige
AW: OT @Nepumuk, Dateien suchen
20.01.2011 21:02:25
Nepumuk
Hallo Tino,
schon mal auf so einem Rechner nachgeschaut ob die Ordneroption "Erweiterungen bei bekannten Dateitypen ausblenden" aktiviert ist? Ansonsten habe ich auch keine Erklärung, da mir das noch nicht untergekommen ist.
Gruß
Nepumuk
AW: OT @Nepumuk, Dateien suchen
20.01.2011 21:13:56
Tino
Hallo,
die Erweiterung ist bei diesen Ordnern aktiviert, ich kann also alle Endungen der Dateien sehen.
ok. danke, schade die anderen Varianten sind halt langsamer.
Gruß Tino
AW: OT @Nepumuk, Dateien suchen
20.01.2011 21:25:34
Nepumuk
Hallo Tino,
schon mal mit F8 durchgestept? Finden die Routinen überhaupt eine Datei?
Hier in diesen Zeilen, was wird da für ein Wert zurückgegeben?
lngSearch = FindFirstFile(strFolderPath & "*.*", WFD)
lngSearch = FindFirstFile(strFolderPath & FileFilter, WFD)
Gruß
Nepumuk
Anzeige
AW: OT @Nepumuk, Dateien suchen
21.01.2011 17:08:10
Tino
Hallo,
ich habe es diese Nacht auf der Arbeit nochmal durchgetestet an verschiedenen Rechnern.
Der Such Ort ist bei allen Rechnern als gleiches Laufwerk eingebunden.
An fünf Rechner getestet, an einem findet er einfach nichts,
lngSearch = FindFirstFile(strFolderPath & "*.*", WFD)
hat an diesen den Wert -1, als ob es den Ordner nicht gäbe.
Ich kann es einfach nicht nachvollziehen, habe sogar den Ordnerpfad schon fest vergeben
(kopiert aus Explorer) um da irgendwelche Fehler auszuschließen.
Gruß Tino
AW: OT @Nepumuk, Dateien suchen
21.01.2011 21:44:47
Nepumuk
Hallo Tino,
das sollte eigentlich nur passieren, wenn der User keine Rechte für diesen Ordner hat. Manuell kannst du ihn aber öffnen?
Gruß
Nepumuk
Anzeige
AW: OT @Nepumuk, Dateien suchen
22.01.2011 14:50:23
Harald
Hallo zusammen,
ich verstehe von den vorherigen Einträgen nicht so viel.
Aber, da ich das Problem ins Forum gestellt habe, hier noch einige zusätzliche Infos:
1) Der gleiche Code zum Öffnen steht auch in einem Tabellenblatt und wird durch Klick auf einen CommandButton gestartet. Das funktioniert einwandfrei!!!
Private Sub CommandButton1_Click()
Workbooks.Open Filename:="C:\Test\TESTDATEI.xls", UpdateLinks:=3
End Sub

2) Beim Schliessen der Datei soll der Code dann nochmal wiederholt werden.
Und hier funktioniert es nicht.
An einer fehlenden Berechtigung kann es also nicht liegen.
Liegt es vielleicht daran, dass die Datei kurz vorher bereits per Code geöffnet, aktualisiert und geschlossen wurde?
Bei Einzelschritten mit F8 wird der Code einfach nicht ausgeführt. Es erscheint aber auch kein Fehlerhinweis oder Debugger. Alles sehr merksam!!!!
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Workbooks.Open Filename:="C:\Test\TESTDATEI.xls", UpdateLinks:=3
End Sub
Vielen Dank, dass ihr euch so intensiv um die Problemlösung kümmert.
Es grüßt: Harald G.
Anzeige
@Harald
22.01.2011 15:43:46
Tino
Hallo,
wo steht dieser der Code "Workbook_BeforeClose...", steht dieser in "DieseArbeitsmappe".
Lade doch mal ein ein Bsp. hoch wo dieser Code nicht ausgeführt wird.
Gruß Tino
AW: OT @Nepumuk, Dateien suchen
22.01.2011 15:51:10
Tino
Hallo,
ja es ist alles in Ordnung.
Ich denke es liegt irgendwie an dem Windows, vielleicht hat das Betriebssystem eine Macke.
Der User der normalerweise an diesem Platz arbeitet berichtet auch über andere
unnormale Verhaltensweisen.
Gruß Tino

85 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige