好的,我刚刚编写了一个非常简单的VBA脚本,该脚本关闭并抓取在指定位置找到的文件的文件大小( 编辑 更新代码来自dscarr):
Public Function FileSize(path As String) As Variant
On Error GoTo Err_FileSize:
Dim retVal As Variant
Dim filesys As Object
Dim file As Object
retVal = ""
Set filesys = CreateObject("Scripting.FileSystemObject")
Set file = filesys.GetFile(path)
retVal = file.Size
Exit_FileSize: On Error Resume Next
FileSize = retVal
Exit Function
Err_FileSize: retVal = "Error: " & Err.Description
Resume Exit_FileSize
End Function
如果我将其导入新工作簿,请将文档另存为“Excel启用宏的工作簿”以及名为readme.txt
的空文件,然后将“./readme.txt”放在A1和“= FileSize”中(A1)“在A2中,A2正确评估readme.txt
的文件大小,0字节。大。如果我然后保存文档,关闭并重新打开它,我警告我们禁用了宏。如果我启用它们,A2的内容已更改为#VALUE!
,我所做的任何事情都不会使该功能再次起作用。有没有人见过这个,谁能指出我在这里犯的错误?
编辑 :问题似乎是由我使用相对路径引起的。我无法解释为什么它适用于新工作簿,但不能保存和重新打开,但使用绝对路径解决了问题,正如dscarr所识别的那样,是“找不到文件”问题。
答案 0 :(得分:3)
我在Excel 2007 Macro Enabled工作簿中复制了您的代码,发现它可以正常使用以下警告
打开工作簿时,它不会自动更新值(例如,运行FileSize函数)。这可以通过向计算工作簿的Worrkbook_Open事件处理程序添加一些代码来补偿。
当找不到指定的文件时,我收到#VALUE错误。实际上,当文件丢失或错误命名时,行“Set file = filesys.GetFile(path)”会抛出错误号53“找不到文件”。在这种情况下,永远不会设置返回值,因为永远不会调用设置它的代码行。在实际尝试检索文件大小之前,您可以尝试设置默认值“File Not Found”。
答案 1 :(得分:0)
在Excel 2010中,转到文件 - >选项 - >信任中心 - >宏设置,并确保已选中启用选项按钮。