it-swarm.com.de

Überprüfen Sie mit VBA, ob die Datei vorhanden ist

Sub test()

thesentence = InputBox("Type the filename with full extension", "Raw Data File")

Range("A1").Value = thesentence

If Dir("thesentence") <> "" Then
    MsgBox "File exists."
Else
    MsgBox "File doesn't exist."
End If

End Sub

Wenn ich den Textwert aus dem Eingabefeld aufnehme, funktioniert er nicht. Wenn jedoch "the sentence" aus If Dir() entfernt und durch einen tatsächlichen Namen im Code ersetzt wird, funktioniert es. Kann jemand helfen?

72
Dinesh Goel

Beachten Sie, dass Ihr Code Dir("thesentence") enthält. Dies sollte Dir(thesentence) sein.

Ändere deinen Code in diese

Sub test()

thesentence = InputBox("Type the filename with full extension", "Raw Data File")

Range("A1").Value = thesentence

If Dir(thesentence) <> "" Then
    MsgBox "File exists."
Else
    MsgBox "File doesn't exist."
End If

End Sub
119
Cylian

Verwenden Sie das Office-Objekt FileDialog, damit der Benutzer eine Datei aus dem Dateisystem auswählt. Fügen Sie in Ihrem VB - Projekt oder im VBA-Editor einen Verweis auf Microsoft Office Library hinzu, und suchen Sie in der Hilfe nach. Das ist viel besser, als wenn Leute vollständige Pfade betreten.

Hier ist ein Beispiel mit msoFileDialogFilePicker, damit der Benutzer mehrere Dateien auswählen kann. Sie können auch msoFileDialogOpen verwenden.

'Note: this is Excel VBA code
Public Sub LogReader()
    Dim Pos As Long
    Dim Dialog As Office.FileDialog
    Set Dialog = Application.FileDialog(msoFileDialogFilePicker)

    With Dialog
        .AllowMultiSelect = True
        .ButtonName = "C&onvert"
        .Filters.Clear
        .Filters.Add "Log Files", "*.log", 1
        .Title = "Convert Logs to Excel Files"
        .InitialFileName = "C:\InitialPath\"
        .InitialView = msoFileDialogViewList

        If .Show Then
            For Pos = 1 To .SelectedItems.Count
                LogRead .SelectedItems.Item(Pos) ' process each file
            Next
        End If
    End With
End Sub

Es gibt viele Optionen, daher müssen Sie die vollständigen Hilfedateien sehen, um alles Mögliche zu verstehen. Sie könnten mit dem Office 2007 FileDialog-Objekt beginnen (natürlich müssen Sie die richtige Hilfe für die von Ihnen verwendete Version finden).

18
ErikE

Korrektur für fileExists von @UberNubIsTrue:

Function fileExists(s_directory As String, s_fileName As String) As Boolean

  Dim obj_fso As Object, obj_dir As Object, obj_file As Object
  Dim ret As Boolean
   Set obj_fso = CreateObject("Scripting.FileSystemObject")
   Set obj_dir = obj_fso.GetFolder(s_directory)
   ret = False
   For Each obj_file In obj_dir.Files
     If obj_fso.fileExists(s_directory & "\" & s_fileName) = True Then
        ret = True
        Exit For
      End If
   Next

   Set obj_fso = Nothing
   Set obj_dir = Nothing
   fileExists = ret

 End Function

EDIT: gekürzte Version

' Check if a file exists
Function fileExists(s_directory As String, s_fileName As String) As Boolean

    Dim obj_fso As Object

    Set obj_fso = CreateObject("Scripting.FileSystemObject")
    fileExists = obj_fso.fileExists(s_directory & "\" & s_fileName)

End Function
16
amackay11

beseitigen Sie einfach diese Sprachmarken

Sub test()

Dim thesentence As String

thesentence = InputBox("Type the filename with full extension", "Raw Data File")

Range("A1").Value = thesentence

If Dir(thesentence) <> "" Then
    MsgBox "File exists."
Else
    MsgBox "File doesn't exist."
End If

End Sub

Das ist das, was ich mag:

Option Explicit

Enum IsFileOpenStatus
    ExistsAndClosedOrReadOnly = 0
    ExistsAndOpenSoBlocked = 1
    NotExists = 2
End Enum


Function IsFileReadOnlyOpen(FileName As String) As IsFileOpenStatus

With New FileSystemObject
    If Not .FileExists(FileName) Then
        IsFileReadOnlyOpen = 2  '  NotExists = 2
        Exit Function 'Or not - I don't know if you want to create the file or exit in that case.
    End If
End With

Dim iFilenum As Long
Dim iErr As Long
On Error Resume Next
    iFilenum = FreeFile()
    Open FileName For Input Lock Read As #iFilenum
    Close iFilenum
    iErr = Err
On Error GoTo 0

Select Case iErr
    Case 0: IsFileReadOnlyOpen = 0 'ExistsAndClosedOrReadOnly = 0
    Case 70: IsFileReadOnlyOpen = 1 'ExistsAndOpenSoBlocked = 1
    Case Else: IsFileReadOnlyOpen = 1 'Error iErr
End Select

End Function    'IsFileReadOnlyOpen
6
whytheq
Function FileExists(fullFileName As String) As Boolean
    FileExists = VBA.Len(VBA.Dir(fullFileName)) > 0
End Function

Funktioniert fast gut auf meiner Website. Wenn ich es mit dem leeren String "" nenne, gibt Dir " connection.odc " zurück !! Wäre toll, wenn Ihr Kerle Ihr Ergebnis teilen könnte.

Jedenfalls gefällt mir das:

Function FileExists(fullFileName As String) As Boolean
  If fullFileName = "" Then
    FileExists = False
  Else
    FileExists = VBA.Len(VBA.Dir(fullFileName)) > 0
  End If
End Function
6
Joachim Brolin
Function FileExists(fullFileName As String) As Boolean
    FileExists = VBA.Len(VBA.Dir(fullFileName)) > 0
End Function
3
Ron Royston

Ich bin nicht sicher, was genau mit Ihrem Code falsch ist, aber ich verwende diese Funktion, die ich online gefunden habe (URL in den Kommentaren), um zu überprüfen, ob eine Datei vorhanden ist: 

Private Function File_Exists(ByVal sPathName As String, Optional Directory As Boolean) As Boolean
    'Code from internet: http://vbadud.blogspot.com/2007/04/vba-function-to-check-file-existence.html
    'Returns True if the passed sPathName exist
    'Otherwise returns False
    On Error Resume Next
    If sPathName <> "" Then

        If IsMissing(Directory) Or Directory = False Then

            File_Exists = (Dir$(sPathName) <> "")
        Else

            File_Exists = (Dir$(sPathName, vbDirectory) <> "")
        End If

    End If
End Function
3
Dan

basierend auf anderen Antworten hier möchte ich meine Einzeiler teilen, die sollte für Verzeichnisse und Dateien funktionieren:

  • Len(Dir(path)) > 0 or Or Len(Dir(path, vbDirectory)) > 0  'version 1 - ... <> "" should be more inefficient generally
    
    • (nur Len(Dir(path)) funktionierte nicht für Verzeichnisse (Excel 2010/Win7))
  • CreateObject("Scripting.FileSystemObject").FileExists(path)  'version 2 - could be faster sometimes, but only works for files (tested on Excel 2010/Win7)
    

als PathExists(path) Funktion:

Public Function PathExists(path As String) As Boolean
    PathExists = Len(Dir(path)) > 0 Or Len(Dir(path, vbDirectory)) > 0
End Function
0

Sehr alter Beitrag, aber da es mir geholfen hat, nachdem ich einige Änderungen vorgenommen hatte, dachte ich, ich würde es teilen. Wenn Sie prüfen, ob ein Verzeichnis vorhanden ist, sollten Sie das VbDirectory-Argument der Dir-Funktion hinzufügen. Andernfalls geben Sie jedes Mal 0 zurück. (Edit: Dies war eine Antwort auf Roys Antwort, aber ich habe aus Versehen eine reguläre Antwort gegeben.)

Private Function FileExists(fullFileName As String) As Boolean
    FileExists = Len(Dir(fullFileName, vbDirectory)) > 0
End Function
0
Word Nerd