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

VBA,搜索网络驱动器中是否存在文件名,vba,excel,Vba,Excel,是否有人有一个宏,我可以在excel中输入文件名列表(a列中的完整路径),然后搜索它们是否存在于网络驱动器(非本地)上 是否可以在列B中显示: 1) 如果文件存在?(对还是错) 2) 文件的时间戳?(创建和/或修改时间文件) 已尝试搜索此项,但希望使用VBA代码 示例:A列有我的文件名,我希望B列显示它们是否存在于网络驱动器中,C列显示时间戳(如果存在) 谢谢。此Sub循环浏览网络共享上的所有文件。您可以获取创建日期、修改日期和上次访问日期。这将只获取存在的文件。你所要做的就是在你想要的地方输入

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

是否可以在列B中显示:

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

已尝试搜索此项,但希望使用VBA代码

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


谢谢。

Sub
循环浏览网络共享上的所有文件。您可以获取创建日期、修改日期和上次访问日期。这将只获取存在的文件。你所要做的就是在你想要的地方输入数据

您需要通过转到工具>引用并选择该选项来添加对Microsoft脚本运行时的引用

编辑:

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

编辑-将单元格循环移动到文件循环内部

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

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

打开网络驱动器并选择工具-->映射网络驱动器-->复制网络位置文件夹并粘贴到文件夹框,然后完成

假设您的本地网络驱动器为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
子测试()
ChDir(“z:\)
lastrow=范围(“A”和Rows.Count).End(xlUp).Row
对于i=1到最后一行
如果Dir(范围(“A”&i).Value)”,则
out=ShowFileAccessInfo(范围(“A”&i).Value)
范围(“B”和i)。值=输出
其他的
'文件不存在
如果结束
接下来我
端接头
函数ShowFileAccessInfo(filespec)
ChDir(“Z:\”)
暗fso,f,s
设置fso=CreateObject(“Scripting.FileSystemObject”)
Set f=fso.GetFile(filespec)
s=UCase(filespec)和“
” s=s&“已创建:&f.DateCreated&”
“ s=s&“上次访问:&f.DateLastAccessed&”
“ s=s&“上次修改:”&f.DateLastModified ShowFileAccessInfo=s 端函数
如果您只想显示文件是否存在,您可以使用我几乎在任何地方都使用的简单代码。它小巧、快速,还可以在本地计算机或网络上检查文件

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
公共函数CheckIfFileExists(文件路径为字符串)
错误转到ExitWithError时出错
如果FilePath=”“,则
CheckIfFileExists=“”
退出功能
如果结束
如果目录(文件路径)“,则
CheckIfFileExists=“找到文件”
其他的
CheckIfFileExists=“未找到文件”
如果结束
退出功能
存在错误:
CheckIfFileExists=“文件不可访问”
端函数
对于时间戳,您可以使用以下代码-

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
公共函数getTimestampOfFile(文件路径为字符串)
错误转到ExitWithError时出错
如果FilePath=”“,则
退出功能
如果结束
如果目录(文件路径)“,则
'这将创建MS脚本运行时FileSystemObject类的实例
Set of s=CreateObject(“Scripting.FileSystemObject”)
getTimestampOfFile=oFS.GetFile(FilePath).DateCreated
其他的
如果结束
退出功能
存在错误:
MsgBox“错误”
端函数
现在你的函数可以使用了!像这样--

我希望它能帮助你

谢谢,

RK.

要实现这一点,您需要将网络驱动器映射为local@Karthick,你好,Karthick,所以我需要将所有文件从网络复制到本地?不,请参见下面的答案A列是否包含完全限定的文件名(例如\\networklocation\somefolder\someotherfolder\somefile.txt)或仅包含文件名(somefile.txt)?您好,谢谢您的回答。我要在哪里加载我要查找的路径?假设我在列A中有路径,此处理程序将在哪里吐出信息?您希望用户选择文件夹并键入名称吗?现在这不会在任何地方吐出任何内容。您将在
中的
如果
中吐出它,用户将为每个
提交say 30个文件名,查看它们是否存在于驱动器中。因此,与其选择本地文件夹,不如选择工作表A列单元格中的文件名,然后在网络驱动器中搜索列在ColA中的这些名称。编辑。我认为这就是您要查找的。如果可能,请尝试只循环一次磁盘上的文件;
FileSystemObject是一个非常慢的对象。移动范围(“A1:A30”)中每个f的
中循环每个签入文件夹。文件
谢谢,Map Network Drive做了什么?这会影响网络驱动器吗?这个解决方案可以不映射它吗?你只是将网络映射为本地驱动器,这都意味着一个副本?好的,我会尝试一下,让你知道它是如何运行的。不,不是副本。请看看这会不会影响网络驱动器?网络驱动器必须保持完整,不得以任何方式更改。请参阅附件中的屏幕截图,只需添加文件路径(无论是什么)对于某些单元格,编写公式并给出存储文件路径的单元格引用。如果文件路径是本地的,单元格中的值将类似于这样的-'C:/Users/…'。如果文件路径在网络上,值将类似于-'SomeComputerName//SharedFiles//SomePath//SomeFolder//SomeFile.someextensiontanks Rehban,其中pre我要准确地输入文件路径的存储位置吗?我把它放在
If Dir(FilePath)”)之间,然后
,得到语法错误。我是否必须更改您的代码以显示我正在查找的位置?对此我不确定,如果您想。。。