excel - 保存并重命名从 .xltm-excel-template 创建的文件,同时使用 VBA 打开该(临时)文件
问题描述
我的目标是保存和重命名从 .xl t m excel 模板创建的文件,而该(临时)文件是用 VBA 打开并且以前没有保存过的。
工作流程如下:
- 用户单击文件夹中的 .xltm Excel 模板文件,打开该 excel 模板的新“副本”(但不是 xltm excel 模板本身)
- 用户然后单击宏按钮将一些数据导入此文件的工作表(例如从 Access)
- 该文件应该被保存并可能根据工作表中包含的数据重命名。
这种情况不同于以下情况:
- 复制和重命名简单的 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 文件夹中。而此时,它不是工作簿,因此“活动工作簿”的相对路径将不起作用。
非常感谢您的帮助!
解决方案
模板工作簿练习
- 将代码复制到新工作簿中。调整两个过程中的路径,例如
C:\Test
。现在添加两个按钮(或不添加)并将两个过程分配给它们。将文件保存在任何地方。 - 现在运行该
createTemplate
程序,它将将此文件保存为名为 的模板MyTemplate.xltm
,关闭它并打开in Windows Explorer
保存它的文件夹 ( )。现在在文件夹中双击新创建的文件,它将作为MyTemplate1
(模板的副本)打开。 - 现在运行该过程,它将在保存并关闭之前
testTemplate
将当前时间(时间戳)写入单元格。它再次导航到.A1
TestTemplate.xlsm
Windows 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
推荐阅读
- amazon-web-services - 如何限制用户的 AppSync 查询?
- python - Pip 抛出“初始化插件 EntryPoint 时出错(name='macOS', value='keyring.backends.macOS', group='keyring.backends')”
- javascript - 当我们有自定义 antd 表单组件时,form.validateFields() 不起作用
- karate - 如果节点上不存在键,则需要将 json 键值检索为 null
- laravel - 无法根据条件在单个图形中绘制多条曲线
- r - 如何停止 bookdown 重新排序标点符号?
- html - 在 Angular8 中单击按钮隐藏和显示 html 表中的多列
- java - 使用不同游标更新表的不同部分的多线程程序
- project-reactor - Schedulers.boundedElastic() 和日志记录问题
- google-cloud-functions - 读取存储触发云函数的日志