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

Forumthread: Wo liegt bloß der Fehler

Wo liegt bloß der Fehler
25.01.2008 12:46:00
THorsten
Hallo miteinander,
ich habe ein Makro, welches prüfen soll, ob in einem Verzeichnis eine Datei vorhanden ist. Leider meldet mir das Makro immer, es ist etwas vorhanden, auch wenn gar nichts da ist. Was läuft falsch?

Sub holen()
Name = ActiveWorkbook.Name
Set fs = CreateObject("Scripting.FileSystemObject")
If fs.folderexists("K:\") = True Then
MsgBox "Es befinden sich noch Dateien auf Laufwerk K:, Du solltest die bringen.bat ( _
Symbolleiste 'K räumen' ausführen"
frage = MsgBox("Willst Du das jetzt machen?", vbYesNo)
If frage = 6 Then End
If frage = 7 Then GoTo weiter:
End If
Set fs = Application.FileSearch
With fs
.LookIn = "k:\"
.Filename = "*.*"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
MsgBox "Es wurden " & .FoundFiles.Count & _
" Datei (en) gefunden."
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "K: ist leer"
End If
End With
weiter:
welche = InputBox("Welche Angebotsmappe möchtest Du abholen?")
Set fs = CreateObject("Scripting.FileSystemObject")
On Error GoTo fehler:
fs.Copyfolder "\\server\untiefe\angebote\" & welche, "k:\"
neu = welche
welche = ""
weiter = MsgBox("weitere Angebotsmappen?", vbYesNo)
If weiter = 6 Then GoTo weiter Else GoTo ende:
fehler:
MsgBox "Mappe nicht gefunden"
ende:
Workbooks.Open "k:\" & neu & "\" & neu & ".xls"
Workbooks(Name).Close False
End Sub


Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wo liegt bloß der Fehler
25.01.2008 12:54:00
Andi
Hi,
ich hab mir Deinen Code jetzt nicht im Detail angesehen, aber die einfachste Methode (die im Gegensatz zu Filesearch auch mit XL2007 kompatibel ist), um festzustellen ob ein Ordner leer ist oder nicht, wäre folgende:

Sub t()
Select Case Dir("C:\test\*.*")
Case Is = ""
MsgBox "Ordner ist leer"
Case Else
MsgBox "Ordner ist nicht leer"
End Select
End Sub


Schönen Gruß,
Andi

Anzeige
AW: Wo liegt bloß der Fehler
25.01.2008 14:14:00
THorsten
Hab ich probiert, aber jetzt kommt immer die Meldung, das nichts da ist, obwohl der Ordner nicht leer ist.

AW: Wo liegt bloß der Fehler
25.01.2008 14:21:00
Andi
Hi,
bist Du sicher, dass der Pfad korrekt ist?
Wenn der Pfad nicht existiert, gibt Dir auch "" zurück.
Schönen Gruß,
Andi

AW: Wo liegt bloß der Fehler
25.01.2008 14:39:00
dan
Hi,
hier ein beisp. mit FileSystemObject. Fuer diesen Code braucht man die Bibliothek Microsoft runtime zu referenzieren. Gruss Dan, cz.
Option Explicit

Public Sub Main()
Dim fs As Scripting.FileSystemObject
Dim fld As Scripting.Folder
Dim testedFolderPath As String
Set fs = New Scripting.FileSystemObject
testedFolderPath = "c:\temp"
On Error Resume Next
Err.Clear
Set fld = fs.GetFolder(testedFolderPath)
If (Err.Number = 0) Then
MsgBox IsFolderEmpty(fld), vbInformation, "folder is empty"
ElseIf (Err.Number = 76) Then
MsgBox Err.Description, vbCritical, "Getting folder error"
' path not found code ...
Else
MsgBox Err.Description, vbCritical, "Getting folder error"
End If
End Sub



Public Function IsFolderEmpty(ByVal testedFolder As Scripting.Folder) As Boolean
Dim returnValue As Boolean
If (testedFolder.Files.Count = 0) Then
returnValue = True
Else
returnValue = False
End If
IsFolderEmpty = returnValue
End Function


Anzeige
AW: Wo liegt bloß der Fehler
25.01.2008 18:00:04
Holger
Hallo THorsten,
auch wenn dir bereits Lösungen angeboten werden, will ich sagen, wo dein Fehler steckt.
Du prüfst mit
If fs.folderexists("K:\") = True Then
nicht, ob noch Dateien ein K:\ sind, sondern nur, ober der Ordner existiert.
Dazu musst du prüfen, ob Unterordner oder Dateien im Ordner enthalten sind, z.B. mit
c = "Das zu untersuchende Verzeichnis"
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.folderexists(c) = False Then MsgBox "Ordner nicht vorhanden, ...": Exit Sub
Set fldr = fso.getfolder(c) 'Quellrechner
Set sfldr = fldr.subfolders
Set fls = fldr.files
If sfldr.Count = 0 and fls.Count = 0 Then
MsgBox "Ordner leer"
Else
MsgBox "Ordner nicht leer"
End If
Übrigens: Deine Zeilen nach "If frage = 7 Then GoTo weiter:" bis "weiter:" werden nie durchlaufen, weil du entweder das Programm beendest oder bei "weiter:" weitermachst.
Viel Erfolg
Holger
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Fehlerbehebung in Excel VBA: Überprüfung eines Verzeichnisses


Schritt-für-Schritt-Anleitung

Um zu überprüfen, ob ein Verzeichnis in Excel VBA leer ist oder nicht, kannst Du die FileSystemObject-Klasse verwenden. Hier ist ein einfaches Beispiel, das Dir zeigt, wie es geht:

  1. Öffne den VBA-Editor (Alt + F11).
  2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" > Einfügen > Modul).
  3. Kopiere den folgenden Code in das Modul:
Sub CheckFolder()
    Dim fso As Object
    Dim folder As Object
    Dim folderPath As String

    folderPath = "K:\" ' Ändere den Pfad nach Bedarf
    Set fso = CreateObject("Scripting.FileSystemObject")

    If fso.FolderExists(folderPath) Then
        Set folder = fso.GetFolder(folderPath)
        If folder.Files.Count = 0 Then
            MsgBox "Ordner ist leer"
        Else
            MsgBox "Ordner ist nicht leer"
        End If
    Else
        MsgBox "Ordner existiert nicht"
    End If
End Sub
  1. Führe das Makro aus, um den Status des Ordners zu überprüfen.

Häufige Fehler und Lösungen

  1. Fehler: "Run-time error 53: File not found"

    • Stelle sicher, dass der Pfad korrekt ist. Wenn der Pfad nicht existiert, wird dieser Fehler angezeigt.
  2. Problem mit FolderExists

    • Überprüfe, ob der Ordner tatsächlich existiert. Verwende fso.FolderExists("K:\"), um dies zu bestätigen.
  3. Code wird nicht wie erwartet ausgeführt

    • Achte darauf, dass Du den richtigen Pfad prüfst und dass Du die richtigen Objektvariablen verwendest. Achte darauf, dass die Dim-Anweisungen korrekt sind.

Alternative Methoden

Anstelle von FileSystemObject kannst Du auch die Dir-Funktion verwenden, um zu überprüfen, ob ein Ordner leer ist. Hier ist ein Beispiel:

Sub CheckDir()
    Select Case Dir("K:\*.*")
        Case Is = ""
            MsgBox "Ordner ist leer"
        Case Else
            MsgBox "Ordner ist nicht leer"
    End Select
End Sub

Diese Methode ist einfach und funktioniert gut in Excel 2007 und höher.


Praktische Beispiele

Hier ist ein erweitertes Beispiel, das sowohl die Überprüfung auf Leere als auch die Auflistung der Dateien im Ordner zeigt:

Sub ListFilesInFolder()
    Dim fso As Object
    Dim folder As Object
    Dim file As Object
    Dim folderPath As String

    folderPath = "K:\"
    Set fso = CreateObject("Scripting.FileSystemObject")

    If fso.FolderExists(folderPath) Then
        Set folder = fso.GetFolder(folderPath)
        If folder.Files.Count = 0 Then
            MsgBox "Ordner ist leer"
        Else
            MsgBox "Ordner ist nicht leer. Dateien:"
            For Each file In folder.Files
                MsgBox file.Name
            Next file
        End If
    Else
        MsgBox "Ordner existiert nicht"
    End If
End Sub

Tipps für Profis

  • Verwende stets On Error Resume Next, um Fehler im Code abzufangen und zu behandeln. So kannst Du sicherstellen, dass Dein Makro nicht abrupt stoppt.
  • Achte darauf, die Bibliothek Microsoft Scripting Runtime zu referenzieren, um die FileSystemObject-Funktionen optimal zu nutzen.
  • Teste immer Deinen Code mit verschiedenen Ordnern und Dateien, um sicherzustellen, dass alle möglichen Szenarien abgedeckt sind.

FAQ: Häufige Fragen

1. Was ist FileSystemObject? FileSystemObject ist ein VBA-Objekt, das Dir ermöglicht, auf das Dateisystem zuzugreifen und verschiedene Operationen wie das Erstellen, Löschen und Überprüfen von Ordnern und Dateien durchzuführen.

2. Wie kann ich überprüfen, ob ein Ordner existiert? Verwende die Methode fso.FolderExists("Pfad"), um zu prüfen, ob der Ordner existiert. Wenn der Rückgabewert True ist, existiert der Ordner.

3. Was tun bei "Run-time error 53"? Überprüfe den angegebenen Pfad und stelle sicher, dass er korrekt ist. Dieser Fehler tritt auf, wenn der Pfad nicht gefunden werden kann.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige