VB Speichern in Excel: Fehler "Verzeichnis existiert nicht!"

tw04n202

Grünschnabel
Hi,

hallo allerseits. Bin total neu in der VB-Programmierung und sollte mir für einen Freund mal Problem anschauen warum beim importieren seiner Excel Datei, das Makro schreit "Das Verzeichnis existiert nicht" oder "Keine Daten im Verzeichnis gefunden!".
Beim debuggen habe ich gemerkt der Funktion irgendetwas nicht an der Variable strPath nicht schmeckt. Das "lustige" ist aber, das alles vorher auf ein externes Medium mit dem Laufwerksbuchstaben z: gespeichert wurde und es lief alles ohne Probleme. Nur wollten wir es mal auf der Festplatte speichern und es klappt nicht mehr. Hier ein Codeausschnitt:


Code:
Option Explicit

Public Function GetXLFiles(ByRef astrXLFiles() As String, _
      ByVal strLookIn As String, Optional fSearchSubfolders _
      As Boolean = False, Optional fname As String) As Boolean

  Dim nFilesCnt   As Long
  Dim nFile       As Long
  Dim nCounter    As Long
  Dim strFileName As String

  On Error Resume Next
  With Application.FileSearch
    .NewSearch
    .LookIn = strLookIn
    .SearchSubFolders = fSearchSubfolders
    .filename = fname
    .FileType = msoFileTypeExcelWorkbooks

    If .Execute(SortBy:=msoSortByFileName, SortOrder:= _
          msoSortOrderAscending, AlwaysAccurate:=True) > 0 Then

      nFilesCnt = .FoundFiles.Count
      ReDim astrXLFiles(0 To nFilesCnt - 1)

      nCounter = -1
      For nFile = 1 To nFilesCnt
        strFileName = .FoundFiles(nFile)
        If Len(Dir$(strFileName)) > 0 Then
          nCounter = nCounter + 1
          astrXLFiles(nCounter) = strFileName
        End If
      Next

      If nCounter > -1 Then
        ReDim Preserve astrXLFiles(0 To nCounter)
        GetXLFiles = True
      End If
    End If
  End With
  On Error GoTo 0
End Function

Public Sub Findfile()
    Dim strPath         As String
    Dim astrXLFiles()   As String
    Dim nFile           As Long
    Dim outstring       As String
    Dim i               As Long

    strPath = "c:\"
    Sheets("Prüfen & Nacharbeiten").Select

    For i = 12 To 65536
        If Cells(i, 2) = "" Then
            MsgBox "Importvorgang abgeschlossen", vbInformation + vbOKOnly, "Datenimport"
            Exit For
        End If
        If Cells(i, 1) = "" Then
        
            MsgBox "hier die strPath: " & vbCrLf & strPath & vbCrLf & " und vbDirectory:" & vbDirectory
            If Len(Dir$(strPath, vbDirectory)) > 0 Then
                If GetXLFiles(astrXLFiles(), strPath, True, "Ca" & Format(Cells(i, 2), "0000000")) Then
                    If UBound(astrXLFiles) > 0 Then
                        outstring = ""
                        For nFile = 0 To UBound(astrXLFiles)
                            outstring = outstring & astrXLFiles(nFile) & vbCrLf
                        Next
                        MsgBox "Prüfprotokoll wurde " & UBound(astrXLFiles) + 1 & " mal gefunden!" & vbCrLf & _
                            vbCrLf & outstring & vbCrLf & _
                            "Bitte überprüfen Sie die Protokolle!", vbCritical + vbOKOnly, "Datenimport"
                        Exit Sub
                    End If
        
                    Import astrXLFiles(0), i, Format(Cells(i, 2), "0000000")
        
                    Erase astrXLFiles
                Else
                    MsgBox "Keine Daten im Verzeichnis " & _
                        vbCrLf & strPath & vbCrLf & "gefunden!", _
                        vbInformation, "Datemimport"
                End If
            Else
                MsgBox "Das Verzeichnis " & vbCrLf & strPath & vbCrLf & _
                    "existiert nicht!", vbInformation, "Datenimport"
            End If
        End If
    Next i
End Sub


Public Sub Import(fname As String, row As Long, serial As Long)
    Dim currentfname As String
    Dim Importfname As String
    
    
  ......

End Function
Nun ich bin verwirrt, weil ich mir dachte, ich ändere einfach den Dateipfad String und fertig. Von wegen ! Nun debugge und suche ich schon eine Weile, komme aber als total VB Neuling nicht so recht weiter!

Wisst ihr Rat warum es mir in diese beiden "Error" Else-Fälle springt und wie ich das beheben könnte ? Der Pfad stimmt auf jeden Fall denke ich.

Lieben Gruß und dank im voraus.
Bruno
 

tw04n202

Grünschnabel
Hi,

Was ich inzwischen dazu ergänzen möchte nach einigem Googln und Debuggen. Ein Problem scheint mir in der "On Error Resume Next" und der "Application.FileSearch", die im Excel 07 nicht mehr existieren.

Leider kommt der Else-Fehlerfall auch in der älteren Excel Version.
Weißt jetzt irgendwie garnicht mehr so recht weiter. Warum macht MS das nicht kompatibel?

lg,
Bruno
 

ronaldh

Erfahrenes Mitglied
Das hat sich bei Excel 2007 stark geändert. In früheren Versionen war VBA eine Variante von VB6, bei Office 2007 ist es soviel ich weiß VB-.NET basiert.

Ich arbeite mit Office 2003, kann Dir daher nicht wirklich helfen. Aber ich kann mich dunkel erinnern, dass ich auch schon mal nach diesem Thema gegoogelt hatte, und da hatte ich irgendwo etwas gefunden, was gerade die FileSearch-Funktion ersetzen konnte.

Läuft Deine Fuktion denn unter älteren Excel-Versionen einwandfrei?
 

tw04n202

Grünschnabel
Bei der Version des Freundes schon. Zumindest der Teil, dass es auf dem externen Laufwerk gespeichert wird.
Wollen sie aber das ganze unter dem Laufwerk C speichern, meckert das Programm. ;-)
 

ronaldh

Erfahrenes Mitglied
Arbeitet der Benutzer als "Standard-Benutzer", d.h. mit eingeschränkten Rechten (wie es aus Sicherheitsgründen auch sein sollte), oder läuft dort Vista (da ist die Einstellung als Standard-Benutzer voreingestellt)?

Dann darf man nicht unter C:\ speichern, das ist dann ein Rechte-Problem.
 

tw04n202

Grünschnabel
Kollegin benutzt Windows XP, also daran sollte es auch nicht liegen, oder?
 
Zuletzt bearbeitet:

ronaldh

Erfahrenes Mitglied
Unter XP kann man (und sollte man!) auch als Standard-Benutzer mit eingeschränkten Rechten arbeiten. Das sagt also nichts...
 

tw04n202

Grünschnabel
Hi,

das Problem hat sich gelöst. Es war wohl nötig in den Namen der Datei eine 6 stelliges Nummer einzugeben. Das habe ich glatt im Code übersehen (Newbie halt.

Danke für die guten Ratschläge auf jeden Fall :)