我想创建一个excel模板,其中包含用于约会列的公式。但是,由于这些公式将基于TODAY()
,我需要将它们转换为静态字符串(因此每当有人打开日期时日期都不会改变)。有没有办法添加一个宏,当有人根据模板创建新的电子表格时,该宏会自动运行? (与Auto_Open()
类似,仅适用于Create,而不是Open)。如果是这样,我可以创建一个在创建文档时replace the formulas with their results的宏。可以这样做吗?
[注意:我没有和这个解决方案结婚;它似乎是保护我的电子表格最简单的方法。如果有人可以提出替代方法,我就有义务了。]
答案 0 :(得分:2)
我有几个想法......
代码:
Private Sub Workbook_Open()
If Dir(ActiveWorkbook.Name) = "" Then
'run the macro?
MsgBox "I'm gonna run this macro"
End If
End Sub
today()
公式的单元格
打开,如果它们已经填充,那么不要运行宏?答案 1 :(得分:0)
我意识到不需要Workbook_Create()
函数,因为可以通过在宏运行一次之后删除宏来模拟该行为(这在首次创建时会发生)。使用.xlsx扩展名保存文件时,将自动删除宏。此外,您需要在打开模板本身时(在编辑模板时)阻止宏运行。您可以在打开它时按住SHIFT
键以防止自动运行宏,但由于该方法不是万无一失,我在顶部添加了此代码:
Private Sub Workbook_Open()
'If we're opening the template, don't run the macro
If Application.ActiveWorkbook.FileFormat = xlOpenXMLTemplateMacroEnabled Then
Exit Sub
End If
...
'add code here to SaveAs .xlsx, thus removing the macros, so it won't run every time.
End Sub
(注意:我没有显示我的SaveAs代码,因为它相当混乱:我想要取消关于丢失宏的默认警告,但也想保护用户不要无意中覆盖以前的文件。如果有人有兴趣,我可以张贴)