VBA,搜索网络驱动器中是否存在文件名

时间:2016-04-22 13:26:06

标签: excel vba excel-vba

有没有人有一个宏我可以在excel中输入文件名列表(Col A中的完整路径)并搜索它们是否存在于网络驱动器(非本地)上?

是否可以在Col B中显示:

1)如果文件存在? (对或错)  2)文件的时间戳? (创建和/或修改时间文件)

尝试搜索此内容,但想使用VBA代码。

示例:Col A有我的文件名,我希望Col B显示它们是否存在于网络驱动器中,而C显示时间戳是否存在。

感谢。

3 个答案:

答案 0 :(得分:2)

如果您只想显示该文件是否存在,您可以使用我在几乎所有地方使用的这个简单代码。它小巧,快速,还可以检查本地计算机或网络中的文件。

Public Function CheckIfFileExists(FilePath As String)

On Error GoTo ExitWithError

If FilePath = "" Then
    CheckIfFileExists = ""
    Exit Function
End If
If Dir(FilePath) <> "" Then
    CheckIfFileExists = "File found"
Else
    CheckIfFileExists = "File not found"
End If

Exit Function
ExitWithError:
    CheckIfFileExists = "File not accessible"
End Function

对于TimeStamp,您可以使用以下代码 -

Public Function getTimestampOfFile(FilePath As String)

On Error GoTo ExitWithError

If FilePath = "" Then
    Exit Function
End If
If Dir(FilePath) <> "" Then
'This creates an instance of the MS Scripting Runtime FileSystemObject class
Set oFS = CreateObject("Scripting.FileSystemObject")

getTimestampOfFile = oFS.GetFile(FilePath).DateCreated
Else
End If

Exit Function
ExitWithError:
MsgBox "Error"
End Function

现在您的功能已准备就绪!像这样 -

Use the file exists function as if it is excel's in-build

Do the same for timestamp

我希望它对你有所帮助。

谢谢, RK。

答案 1 :(得分:1)

Sub循环播放网络共享中的所有文件。您可以获取创建日期,修改日期和上次访问日期。这只会获取存在的文件。您只需输入您想要的数据即可。

您需要转到工具&gt;添加对Microsoft Scripting Runtime的引用。参考并选择该选项。

<强>编辑:

Sub FileHandler()

 Dim fso As Scripting.FileSystemObject
 Dim fold As Scripting.folder
 Dim f As Range, checkF As Scripting.file
 Dim networkExistsCell As Range, timeStamp As Range

 Set fso = New Scripting.FileSystemObject
 Set fold = fso.GetFolder("\\your_network_share\")


' Disk access is the slow part, so structure the loops so each file on disk is only checked once.

  For Each checkF In fold.Files

    For Each f In Range("A1:A30")
      If checkF.Name = f.Value Then
        rowNum = f.Row
        Set networkExistsCell = Range("B" + Trim(Str(rowNum)))
        Set timeStamp = Range("C" + Trim(Str(rowNum)))
        networkExistsCell.FormulaR1C1 = checkF.Name
        timeStamp.FormulaR1C1 = Format(checkF.DateCreated, "MM-DD-YYYY")
      End If
    Next f

  Next checkF

End Sub

编辑 - 移动文件循环内的单元格循环

答案 2 :(得分:1)

假设您的文件名以A1,A2等开头..如果文件存在,时间戳将打印在相应的B列B1,B2等等。

按照以下步骤将您的网络驱动器映射到本地

  

打开网络驱动器并选择工具---&gt; Map Network Drive ---&gt;复制网络位置文件夹并粘贴到“文件夹”框并单击“完成”

假设您的本地网络驱动器是Z:\

Sub testing()
    ChDir ("z:\)
    lastrow = Range("A" & Rows.Count).End(xlUp).Row
    For i = 1 To lastrow
        If Dir(Range("A" & i).Value) <> "" Then
            out = ShowFileAccessInfo(Range("A" & i).Value)
            Range("B" & i).Value = out
        Else
            'File NOt Exists
        End If
    Next i
End Sub


Function ShowFileAccessInfo(filespec)
  ChDir ("Z:\")
  Dim fso, f, s
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set f = fso.GetFile(filespec)
  s = UCase(filespec) & "<BR>"
  s = s & "Created: " & f.DateCreated & "<BR>"
  s = s & "Last Accessed: " & f.DateLastAccessed & "<BR>"
  s = s & "Last Modified: " & f.DateLastModified
  ShowFileAccessInfo = s
End Function