以编程方式保存Excel插件

7
我有一个由用户偶尔更新的工作表,用于制作Add-In(.XLAM)。 Add-In位于网络共享上,用户链接到它。 我希望让用户能够轻松更新此Add-In(确保将其标记为只读)。
我看过Ken Puls here的文章,介绍了部署Excel Add-Ins的方法,但他使用的 .SaveCopyAs 方法似乎无法接受文件类型。 .SaveAs 方法可以,但是当尝试时,我收到了一个消息,指出文件格式或扩展名无效,我已尝试过.XLAM和.XLA。
DeployPath = "C:\Menu.xlam"
.SaveAs Filename:=DeployPath, ReadOnlyRecommended:=True, FileFormat:=xlOpenXMLAddIn

任何在这方面的帮助都将不胜感激。

1
我发现有时如果不使用文件格式的数字值,可能会遇到问题。尝试使用 FileFormat:=55 而非 FileFormat:=xlOpenXMLAddIn - PermaNoob
不确定您想要实现什么... 您是想将当前打开的工作簿(非加载项)保存为加载项,还是想将加载项保存为加载项?我认为您说的是模板而不是加载项。 - Maciej Los
2个回答

6
我认为你需要使用(Excel 2003及更早版本)。
ThisWorkbook.IsAddin = True
ThisWorkbook.SaveAs "fredyy", xlAddIn

For Excel 2007+ use

ThisWorkbook.SaveAs "fredyy", xlOpenXMLAddIn

当我尝试这样做时,将其保存为2007宏时会出现相同的错误,但是当将其保存为.XLA时,Excel会显示文件扩展名不正确,并将该文件作为常规工作簿而不是加载项打开。 - Tom
感谢您的帮助。即使在立即窗口中运行此代码,文件也会被创建,但是当打开时,Excel会抛出一个错误,声称扩展名无效或文件已损坏。我尝试将工作簿重命名为.ZIP文件,这通常适用于其他Office 2007/10文件,但也会导致文件损坏错误。将其另存为.XLA文件在某种程度上起作用;代码模块存在,但由于它依赖于功能区菜单,因此实际上没有任何作用。从菜单保存可以正常工作。 - Tom

4
这是对我有用的解决方案:
Dim strRawName As String
strRawName = Left(ThisWorkbook.Name, (InStrRev(ThisWorkbook.Name, ".", -1, vbTextCompare) - 1))
ThisWorkbook.IsAddin = True
ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & strRawName & ".xlam", FileFormat:=xlOpenXMLAddIn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接