Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 以编程方式保存Excel加载项_Vba_Excel_Add In_Excel Addins - Fatal编程技术网

Vba 以编程方式保存Excel加载项

Vba 以编程方式保存Excel加载项,vba,excel,add-in,excel-addins,Vba,Excel,Add In,Excel Addins,我有一个由用户偶尔更新的工作表,用于制作外接程序(.XLAM)。外接程序位于网络共享上,用户链接到该外接程序。我希望使用户能够轻松更新此加载项(确保将其标记为只读) 我看过关于部署Excel加载项的文章,但是他使用的.SaveCopyAs方法似乎无法接受文件类型 > < SaveAs > /Cord>方法,但是当我尝试这个消息时,我会告诉你文件格式或扩展名无效,我已经尝试了.xLand和XLA。 DeployPath = "C:\Menu.xlam" .SaveAs Filename:=Dep

我有一个由用户偶尔更新的工作表,用于制作外接程序(.XLAM)。外接程序位于网络共享上,用户链接到该外接程序。我希望使用户能够轻松更新此加载项(确保将其标记为只读)

我看过关于部署Excel加载项的文章,但是他使用的
.SaveCopyAs
方法似乎无法接受文件类型

<> > < SaveAs > /Cord>方法,但是当我尝试这个消息时,我会告诉你文件格式或扩展名无效,我已经尝试了.xLand和XLA。
DeployPath = "C:\Menu.xlam"
.SaveAs Filename:=DeployPath, ReadOnlyRecommended:=True, FileFormat:=xlOpenXMLAddIn

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

我认为您需要使用(Excel 2003及更早版本)

对于Excel 2007+使用

ThisWorkbook.SaveAs "fredyy", xlOpenXMLAddIn

这是对我有效的解决方案:

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

当我尝试保存2007宏时,我会得到同样的错误,但是当保存为.XLA时,Excel表示文件有错误的扩展名,并将文件作为常规工作簿打开,而不是添加到一个In中,谢谢您的帮助。运行此命令(即使在即时窗口中)将创建文件,但打开时Excel会抛出一个错误,声称扩展名无效或文件已损坏。我尝试将工作簿重命名为.ZIP文件,该文件通常适用于其他office 2007/10文件,但也会导致文件损坏错误。这样做在一定程度上节省了XLA;代码模块就在那里,但由于它依赖于功能区菜单,因此没有一个真正起作用。从菜单中保存效果很好。我发现有时我在不使用FileFormat的数字值时会出现问题。尝试使用
FileFormat:=55
而不是
FileFormat:=xlOpenXMLAddIn
不确定要实现什么。。。您是要将当前打开的工作簿(不是加载项)保存为加载项,还是要将加载项保存为加载项?我想你说的是模板,而不是addin。
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