首页 > 解决方案 > 保存并重命名从 .xltm-excel-template 创建的文件,同时使用 VBA 打开该(临时)文件

问题描述

我的目标是保存和重命名从 .xl t m excel 模板创建的文件,而该(临时)文件是用 VBA 打开并且以前没有保存过的。

工作流程如下:

  1. 用户单击文件夹中的 .xltm Excel 模板文件,打开该 excel 模板的新“副本”(但不是 xltm excel 模板本身)
  2. 用户然后单击宏按钮将一些数据导入此文件的工作表(例如从 Access)
  3. 该文件应该被保存并可能根据工作表中包含的数据重命名。

这种情况不同于以下情况:

如前所述,我的情况是我想保存 excel 文件,当用户单击文件夹中的 .xltm 文件(带有宏的 excel 模板)并在此执行一些宏时,该文件创建为新副本临时文件。

打开模板的新副本后,我运行以下子程序将此新副本保存为下载文件夹中名为“Test”的 xlsm.file,但出现 1004 错误:

ActiveWorkbook.SaveAs "C:\Users\USERNAME\Downloads\Test.xlsm"

在某些论坛中,声明在这种情况下不能使用“ActiveWorkbook”,因为运行代码的实际文件作为 tmp.file 存储在 Windows Temp 文件夹中。而此时,它不是工作簿,因此“活动工作簿”的相对路径将不起作用。

非常感谢您的帮助!

标签: excelvbasave

解决方案


模板工作簿练习

  • 将代码复制到新工作簿中。调整两个过程中的路径,例如C:\Test。现在添加两个按钮(或不添加)并将两个过程分配给它们。将文件保存在任何地方。
  • 现在运行该createTemplate程序,它将将此文件保存为名为 的模板MyTemplate.xltm,关闭它并打开in Windows Explorer保存它的文件夹 ( )。现在在文件夹中双击新创建的文件,它将作为MyTemplate1(模板的副本)打开。
  • 现在运行该过程,它将在保存并关闭之前testTemplate将当前时间(时间戳)写入单元格。它再次导航到.A1TestTemplate.xlsmWindows Explorer
  • 现在您可以打开这个新创建的文件,查看之前在 cell 中写入的时间戳A1
  • 请注意,模板文件具有xltm扩展名,而最后一个(生成的)文件具有xlsm扩展名。

编码

Option Explicit

Sub createTemplate()
    Const FolderPath As String = "F:\Test\2020\65185447"
    With ThisWorkbook
        .SaveAs FolderPath & "\" & "MyTemplate", xlOpenXMLTemplateMacroEnabled
        .FollowHyperlink FolderPath
        .Close
    End With
End Sub

Sub testTemplate()
    Const FolderPath As String = "F:\Test\2020\65185447"
    Range("A1") = Now
    Columns("A").AutoFit
    With ThisWorkbook
        .SaveAs FolderPath & "\" & "TestTemplate", xlOpenXMLWorkbookMacroEnabled
        .FollowHyperlink FolderPath
        .Close
    End With
End Sub

推荐阅读