XLS、XLSX和XLSM格式的宏之间是否存在兼容性问题?

6

XLS、XLSX和XLSM文件中的宏之间是否存在兼容性问题?同一个宏是否适用于所有工作簿?


3
我认为您会混淆人们,因为您着重于文件名而没有提及Office版本之间的向后兼容性。如果您重新措辞问题,您可能会得到更适当的答案。 - JimmyPena
3个回答

13

这些格式之间存在显著区别:

  • .XLS 适用于Excel 2003及以上版本,所以你的VBA代码需要向后兼容更早的Excel版本(<2007)。
  • .XLSX 是Excel 2007格式,不能存储VBA代码
  • .XLSM.XLSB 是Excel 2007格式,允许你在工作簿中保存VBA代码。正如Sydenam所说,这两者之间的区别在于工作簿的存储方式。

简而言之:.XLSB二进制格式(相当于2007+版本的.XLS),而.XLSMOOXML格式。

有关更多信息,请参见何时应该使用xlsm或xlsb格式?


向后兼容的附加说明

我没有看到任何简单的方法来告诉您如何实现向后兼容,我们不能过于泛泛而谈。您可以在Ozgrid上查看Excel 2007中添加的新方法和属性。您也可以在这里找到一些关于如何在Excel 2007上开发的提示。

Ozgrid页面将为您介绍Excel 2007的新元素,然后告诉您如果希望向后兼容,应该不使用哪些元素。


谢谢您的回答。问题不在于各种文件扩展名之间的区别!!! - kinkajou
我认为他更关心Office 2007和2003 VBA方法之间的向后兼容性。例如,Office 2007中有一些新的方法和事件,在2003中无法编译。 - JimmyPena
@JP:该死,谢谢。原帖的问题真的非常不清楚...但是,我已经编辑了我的答案以适应这个新要求。 - JMax

3
请参照 JMax 的回答列出 Excel 2003 中不可用的方法。
通常,应该为您愿意支持的最低版本的 Excel 编写代码。例如,如果您支持 Excel 2000-2010,则应该为 Excel 2000 编写代码。
但是请记住,某些方法在以后的版本中可能已过时。
例如,我建议完全避免使用 FileSearch(已在 Excel 2007 中弃用),而改用 Dir。
您的代码还应该测试本地 Excel 版本并根据版本使用条件编译。
有关条件编译的帮助,请参见 Using Conditional Compilation
还要记住,XLSX 文件无法保存宏。因此,如果文件包含宏代码,则永远不应该以此格式保存文件。

指出“FileSearch”函数的情况加1分。微软表示它存在缺陷,因此在Excel 2007+中将其删除,这可能会很棘手! - JMax

1

Excel使用Visual Basic for Applications(VBA)来编写宏。不同文件类型之间的主要区别在于数据存储方式(编辑和重要的XLSX无法保存宏,在问题中的格式中,XLSM和XLS可以在工作簿中保存宏)。它是Excel和VBA处理宏,因此在这三种文件格式之间运行没有问题。


不,它不能在所有三种格式之间工作,因为 XLSX 无法存储 VBA - JMax
@JMax,您是在暗示如果我在XLSX工作簿中编写宏,它将无法正常工作吗?仅仅因为它无法存储,并不意味着它将不会起作用。 - Andrew Jackman
嗯...它会起作用...直到你将工作簿保存为XLSX格式。 - JMax
你刚才写的是“XLS 无法保存宏”吗?自从何时起,Office 2003 Excel 工作簿就不能保存和存储宏代码了吗?还是我理解有误。 - JimmyPena
没有Excel格式“Xlxs”。我想你的意思是“XLSX”。JMax是正确的 - 以XLSX格式保存Excel 2007+工作簿将删除工作簿中的任何宏。这与你的问题实际上没有任何关系。 - JimmyPena
我刚回来,似乎在编辑时有点疯狂地输入了xlsxlsxlsx! :p - Andrew Jackman

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