使用按钮运行VBA功能

时间:2016-04-01 13:05:00

标签: excel vba excel-vba macros

我定义了一个返回文件大小的VBA函数。现在我想用一个调用不同宏的按钮来调用它。我的期望是,在运行宏之后,它会在最后调用我的函数。我的问题是,当我将公式放入单元格时,它只会在我输入公式时返回当前的文件大小。当我编辑文件,保存并重新打开时,= wbksize()仍然会在编辑之前显示文件大小。

因此,按钮运行此宏的目的是刷新filesize值。这是我尝试做到的。

功能:

Function wbksize()
    myWbk = Application.ThisWorkbook.FullName
    wbksize = FileLen(myWbk)
End Function

刷新:

Worksheets("Sheet2").Range("K1").Calculate

以上似乎不起作用:/

3 个答案:

答案 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