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