使用VBA检查文件是否存在

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 

在这个时候,我从input框中拾取文本值,它不起作用。 但是,如果从If Dir()除去"the sentence" ,并将其replace为代码中的实际名称,则可以使用。 有人可以帮忙吗?

注意你的代码包含应该是Dir(thesentence) Dir("thesentence") Dir(thesentence)

将您的代码更改为此

 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 

使用Office FileDialog对象让用户从文件系统中select一个文件。 在VB项目或VBA编辑器中添加一个引用到Microsoft Office Library然后查看帮助。 这比让人们进入完整路线要好得多。

这里是一个使用msoFileDialogFilePicker来允许用户select多个文件的例子。 你也可以使用msoFileDialogOpen

 '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 

有很多选项,所以你需要看到完整的帮助文件,以了解所有可能的。 您可以从Office 2007 FileDialog对象开始 (当然,您需要为您正在使用的版本find正确的帮助)。

从@UberNubIsTrue更正fileExists:

 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 

编辑:缩短版本

 ' 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 

只是摆脱这些语音标记

 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 

这是我喜欢的一个:

 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 
 Function FileExists(fullFileName As String) As Boolean FileExists = VBA.Len(VBA.Dir(fullFileName)) > 0 End Function 

几乎在我的网站工作得很好。 如果我用空string调用它,Dir返回“ connection.odc ”! 如果你们能分享你的结果,那将是非常棒的。

无论如何,我喜欢这样的:

 Function FileExists(fullFileName As String) As Boolean If fullFileName = "" Then FileExists = False Else FileExists = VBA.Len(VBA.Dir(fullFileName)) > 0 End If End Function 

我并不确定你的代码有什么问题,但是我使用了我在网上find的这个函数(注释中的URL)来检查一个文件是否存在:

 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 
 Function FileExists(fullFileName As String) As Boolean FileExists = VBA.Len(VBA.Dir(fullFileName)) > 0 End Function