【问题标题】:Save and Rename file created from .xltm-excel-template while that (temporary) file is opened with VBA保存并重命名从 .xltm-excel-template 创建的文件,同时使用 VBA 打开该(临时)文件
【发布时间】:2021-03-18 23:29:48
【问题描述】:

我的目标是保存并重命名从 .xltm excel 模板创建的文件,而该(临时)文件是用 VBA 打开且之前未保存的。

工作流程如下:

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

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

  • 复制和重命名简单的 excel 文件 (.xlsx)
  • 使用宏 (.xlsm) 复制和重命名 excel 文件
  • 复制和重命名未打开的 excel 文件(这将通过“命名为”来完成)

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

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

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

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

非常感谢您的帮助!

【问题讨论】:

  • 工作簿中执行保存的代码是否要保存?如果是这样,请尝试 ThisWorkbook 而不是 ActiveWorkbook
  • 你试过这个吗:ActiveWorkbook.SaveAs "C:\Users\USERNAME\Downloads\Test", xlOpenXMLWorkbookMacroEnabled ?

标签: excel vba save


【解决方案1】:

模板工作簿练习

  • 将代码复制到新工作簿中。调整两个过程中的路径,例如C:\Test。现在添加两个按钮(或不添加)并将两个过程分配给它们。将文件保存在任何位置。
  • 现在运行createTemplate 过程,它将把这个文件保存为一个名为MyTemplate.xltm 的模板,关闭它并打开保存它的文件夹(in Windows Explorer)。现在在文件夹中双击新创建的文件,它将以MyTemplate1(模板的副本)打开。
  • 现在运行testTemplate 过程,它会将当前时间(时间戳)写入单元格A1,然后保存为TestTemplate.xlsm 并关闭。它再次导航到Windows Explorer 中的文件夹。
  • 现在您可以打开这个新创建的文件,在单元格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

【讨论】:

  • 谢谢!一个后续问题:不是在新的额外工作簿中编写执行代码,而是当用户在 Windows 资源管理器中单击文件时,代码是否可能运行?工作流程是: 1. 用户单击包含所有代码的 xltm.file。 2. xltm 文件的副本打开。 3. 用户点击文件中的一些按钮,运行一些子程序,例如将数据从 Access 导入工作表。 4. 然后用户单击当前打开的工作表上的按钮以将当前打开的工作簿保存为 xlsm 文件。如果可能,文件的名称应基于工作表中包含的信息。
  • 这是另一个问题的材料。使用它,添加更多信息,然后添加代码,就是这样。您可以在 cmets 中发布指向它的链接,如果您愿意,请通知我看一下。不过,拥有多种意见(解决方案)总是更好。重要的部分是您必须将代码放入包含按钮的工作簿(可能是模板)中。
猜你喜欢
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
  • 2018-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
相关资源
最近更新 更多