有没有人有一个宏我可以在excel中输入文件名列表(Col A中的完整路径)并搜索它们是否存在于网络驱动器(非本地)上?
是否可以在Col B中显示:
1)如果文件存在? (对或错) 2)文件的时间戳? (创建和/或修改时间文件)
尝试搜索此内容,但想使用VBA代码。
示例:Col A有我的文件名,我希望Col B显示它们是否存在于网络驱动器中,而C显示时间戳是否存在。
感谢。
答案 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
我希望它对你有所帮助。
谢谢, 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