wake-up-neo.net

VBA-Prüfung, ob Datei vorhanden ist

Ich habe diesen Code. Es soll prüfen, ob eine Datei vorhanden ist, und sie gegebenenfalls öffnen. Es funktioniert, wenn die Datei vorhanden ist. Wenn dies jedoch nicht der Fall ist und ich das Textfeld leer lasse und auf die Schaltfläche "Senden" klicke, schlägt es fehl. Was ich möchte, wenn das Textfeld leer ist, wird die Fehlermeldung angezeigt, als ob die Datei nicht vorhanden wäre. 

Laufzeitfehler "1004" 

Dim File As String
File = TextBox1.Value
Dim DirFile As String

DirFile = "C:\Documents and Settings\Administrator\Desktop\" & File
If Dir(DirFile) = "" Then
  MsgBox "File does not exist"
Else
    Workbooks.Open Filename:=DirFile
End If
28

etwas wie das

verwenden Sie am besten eine Arbeitsmappenvariable, um die geöffnete Arbeitsmappe (falls erforderlich) weiter zu steuern

aktualisiert, um zu testen, dass der Dateiname eine tatsächliche Arbeitsmappe war - was auch die anfängliche Überprüfung überflüssig macht, abgesehen von der Meldung, dass der Benutzer nicht im Textfeld ist

Dim strFile As String
Dim WB As Workbook
strFile = Trim(TextBox1.Value)
Dim DirFile As String
If Len(strFile) = 0 Then Exit Sub

DirFile = "C:\Documents and Settings\Administrator\Desktop\" & strFile
If Len(Dir(DirFile)) = 0 Then
  MsgBox "File does not exist"
Else
 On Error Resume Next
 Set WB = Workbooks.Open(DirFile)
 On Error GoTo 0
 If WB Is Nothing Then MsgBox DirFile & " is invalid", vbCritical
End If
50
brettdj

Ich verwende diese Funktion, um das Vorhandensein von Dateien zu überprüfen:

Function IsFile(ByVal fName As String) As Boolean
'Returns TRUE if the provided name points to an existing file.
'Returns FALSE if not existing, or if it's a folder
    On Error Resume Next
    IsFile = ((GetAttr(fName) And vbDirectory) <> vbDirectory)
End Function
28
Patrick Honorez

Zur Überprüfung der Existenz können Sie auch verwenden (funktioniert für Dateien und Ordner) :

Not Dir(DirFile, vbDirectory) = vbNullString

Das Ergebnis ist True, wenn eine Datei oder ein Verzeichnis vorhanden ist.

Beispiel:

If Not Dir("C:\Temp\test.xlsx", vbDirectory) = vbNullString Then
    MsgBox "exists"
Else
    MsgBox "does not exist"
End If
17
ZygD

Möglicherweise wird dies durch Dateiname Variable verursacht

File = TextBox1.Value

Es sollte sein

Filename = TextBox1.Value
0
matzone

Ich werde das hier rausschmeißen und dann ducken ... Der übliche Grund zu überprüfen, ob eine Datei existiert, ist, einen Fehler beim Öffnen zu vermeiden. Wie wäre es mit dem Error-Handler, um damit umzugehen:

Function openFileTest(filePathName As String, ByRef wkBook As Workbook, _
                      errorHandlingMethod As Long) As Boolean
'Returns True if filePathName is successfully opened,
'        False otherwise.
   Dim errorNum As Long

'***************************************************************************
'  Open the file or determine that it doesn't exist.
   On Error Resume Next:
   Set wkBook = Workbooks.Open(fileName:=filePathName)
   If Err.Number <> 0 Then
      errorNum = Err.Number
      'Error while attempting to open the file. Maybe it doesn't exist?
      If Err.Number = 1004 Then
'***************************************************************************
      'File doesn't exist.
         'Better clear the error and point to the error handler before moving on.
         Err.Clear
         On Error GoTo OPENFILETEST_FAIL:
         '[Clever code here to cope with non-existant file]
         '...
         'If the problem could not be resolved, invoke the error handler.
         Err.Raise errorNum
      Else
         'No idea what the error is, but it's not due to a non-existant file
         'Invoke the error handler.
         Err.Clear
         On Error GoTo OPENFILETEST_FAIL:
         Err.Raise errorNum
      End If
   End If

   'Either the file was successfully opened or the problem was resolved.
   openFileTest = True
   Exit Function

OPENFILETEST_FAIL:
   errorNum = Err.Number
   'Presumabley the problem is not a non-existant file, so it's
   'some other error. Not sure what this would be, so...
   If errorHandlingMethod < 2 Then
      'The easy out is to clear the error, reset to the default error handler,
      'and raise the error number again.
      'This will immediately cause the code to terminate with VBA's standard
      'run time error Message box:
      errorNum = Err.Number
      Err.Clear
      On Error GoTo 0
      Err.Raise errorNum
      Exit Function

   ElseIf errorHandlingMethod = 2 Then
      'Easier debugging, generate a more informative message box, then terminate:
      MsgBox "" _
           & "Error while opening workbook." _
           & "PathName: " & filePathName & vbCrLf _
           & "Error " & errorNum & ": " & Err.Description & vbCrLf _
           , vbExclamation _
           , "Failure in function OpenFile(), IO Module"
      End

   Else
      'The calling function is ok with a false result. That is the point
      'of returning a boolean, after all.
      openFileTest = False
      Exit Function
   End If

End Function 'openFileTest()
0
riderBill

Hier ist mein aktualisierter Code. Überprüft, ob vor dem Speichern eine Version vorhanden ist, und speichert sie als nächste verfügbare Versionsnummer. 

Sub SaveNewVersion()
    Dim fileName As String, index As Long, ext As String
    arr = Split(ActiveWorkbook.Name, ".")
    ext = arr(UBound(arr))

    fileName = ActiveWorkbook.FullName

    If InStr(ActiveWorkbook.Name, "_v") = 0 Then
        fileName = ActiveWorkbook.Path & "\" & Left(ActiveWorkbook.Name, InStr(ActiveWorkbook.Name, ".") - 1) & "_v1." & ext
    End If

   Do Until Len(Dir(fileName)) = 0

        index = CInt(Split(Right(fileName, Len(fileName) - InStr(fileName, "_v") - 1), ".")(0))
        index = index + 1
        fileName = Left(fileName, InStr(fileName, "_v") - 1) & "_v" & index & "." & ext

    'Debug.Print fileName
   Loop

    ActiveWorkbook.SaveAs (fileName)
End Sub
0
Andrew Prostko