首页 > 解决方案 > 尝试使用 Application Volatile 让单元格在每次更改时显示工作簿的名称,但不工作

问题描述

我正在尝试使用 application.volatile 使单元格在每次打开工作簿时显示工作簿的名称。

Function getbookname() As String

    Application.Volatile
    getbookname = ActiveWorkbook.Name

End Function

我在单元格 B7 中输入 =getbookname(),但结果好坏参半。如果我关闭工作簿,更改工作簿的名称并再次打开,有时它可以工作,有时它不会。有人可以帮忙吗?

标签: excelvba

解决方案


有许多网站解释了为什么要避免使用Volatile,除非真的有必要。

在您的代码中,您正在使用ActiveWorkbook,但是您对所需内容的描述意味着这ThisWorkbook将更合适。

您不需要 VBA。来自https://support.office.com/en-us/article/Insert-the-current-Excel-file-name-path-or-worksheet-in-a-cell-186833c6-c899-4912-a14c-240c2eb51e0b

  • 插入当前文件名、其完整路径和活动工作表的名称:=CELL("filename")
  • 仅插入当前文件名: =MID(CELL("filename"),SEARCH("[",CELL("filename"))+1, SEARCH("]",CELL("filename"))-SEARCH("[",CELL("filename"))-1)

如果你真的想使用 VBA,那么你可以在某处设置一个引用单元格与Workbook_Open事件。如果您使用“命名范围”,这会更容易。对于参数,让我们将此工作簿范围的命名范围称为“书名”。然后,在您需要它的单元格中,您只需键入=bookname

Private Sub WorkBook_Open()
    ThisWorkbook.Sheets("MyReferenceSheet").Range("bookname").Value = ThisWorkbook.Name
End Sub

对于这些选项中的每一个,“不稳定”以及这可能导致的所有问题都是不必要的。


推荐阅读