1

好的,我刚刚编写了一个非常简单的 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 所确定的,这是一个“找不到文件”问题。

4

2 回答 2

3

我在 Excel 2007 启用宏的工作簿中复制了您的代码,发现它在以下警告下工作得很好

  1. 当您打开工作簿时,它不会自动更新值(例如运行 FileSize 函数)。这可以通过向计算工作簿的 Workbook_Open 事件处理程序添加一些代码来补偿。

  2. 当找不到指定的文件时,我收到 #VALUE 错误。实际上,当文件丢失或名称不正确时,“Set file = filesys.GetFile(path)”行会引发错误号 53“File Not Found”。在这种情况下,永远不会设置返回值,因为永远不会调用设置它的代码行。在实际尝试检索文件大小之前,您可以尝试设置默认值“未找到文件”。

于 2011-07-27T20:47:08.000 回答
0

在 Excel 2010 中,转到文件->选项->信任中心->宏设置并确保已选择启用选项按钮。

于 2011-07-27T20:36:47.490 回答