我定义了一个返回文件大小的VBA函数。现在我想用一个调用不同宏的按钮来调用它。我的期望是,在运行宏之后,它会在最后调用我的函数。我的问题是,当我将公式放入单元格时,它只会在我输入公式时返回当前的文件大小。当我编辑文件,保存并重新打开时,= wbksize()仍然会在编辑之前显示文件大小。
因此,按钮运行此宏的目的是刷新filesize值。这是我尝试做到的。
功能:
Function wbksize()
myWbk = Application.ThisWorkbook.FullName
wbksize = FileLen(myWbk)
End Function
刷新:
Worksheets("Sheet2").Range("K1").Calculate
以上似乎不起作用:/
答案 0 :(得分:1)
功能正常,但刷新应该调用函数。
Function wbksize() As String
myWbk = Application.ThisWorkbook.FullName
wbksize = Str(FileLen(myWbk))
End Function
Sub Refresh()
Worksheets("Sheet2").Range("K1") = wbksize
End Sub
答案 1 :(得分:0)
在您的情况下,这可能会或可能不会帮助您.... LINK
我从来不需要在excel上使用它,但它可能是你想要的,你可以将自定义功能设置为' VOLATILE'每当计算得出任何东西时,哪个强制运行它们,再次我从来不需要使用它,所以我不能评论任何缺点或任何东西,但看起来它可能适用于你的情况。
答案 2 :(得分:0)
我对这些进行了测试,它们都运行良好。这取决于您希望触发器的内容:更改工作表,或在工作表上执行计算。
将其中任何一项放入工作表中。第一个将在Calculate上触发,第二个在Change上触发。
Private Sub Worksheet_Calculate()
Dim lFileLength As Long
Application.EnableEvents = False 'to prevent endless loop
lFileLength = FileLen("\\MyFile\Path\AndName.XLS.XLS")
ThisWorkbook.Sheets("Sheet1").Range("A1").Value = CStr(lFileLength)
MsgBox "You changed THE CELL!"
Application.EnableEvents = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lFileLength As Long
Application.EnableEvents = False 'to prevent endless loop
lFileLength = FileLen("\\MyFile\Path\AndName.XLS")
ThisWorkbook.Sheets("Sheet1").Range("B1").Value = CStr(lFileLength)
MsgBox "You changed THE CELL!"
Application.EnableEvents = True
End Sub