从模板创建时自动运行excel宏

时间:2013-12-10 19:07:27

标签: excel-vba templates excel-2010 vba excel

我想创建一个excel模板,其中包含用于约会列的公式。但是,由于这些公式将基于TODAY(),我需要将它们转换为静态字符串(因此每当有人打开日期时日期都不会改变)。有没有办法添加一个宏,当有人根据模板创建新的电子表格时,该宏会自动运行? (与Auto_Open()类似,仅适用于Create,而不是Open)。如果是这样,我可以创建一个在创建文档时replace the formulas with their results的宏。可以这样做吗?

[注意:我没有和这个解决方案结婚;它似乎是保护我的电子表格最简单的方法。如果有人可以提出替代方法,我就有义务了。]

2 个答案:

答案 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代码,因为它相当混乱:我想要取消关于丢失宏的默认警告,但也想保护用户不要无意中覆盖以前的文件。如果有人有兴趣,我可以张贴)