目录
示例
代码
使用HasVBProject属性判断工作簿是否有代码
禁止打开工作簿时执行程序
示例
在某个文件夹下存有若干个以Excel 版本存储的工作簿(xls格式)。将这些xls格式的工作簿批量转换成Excel 以上版本(xlsx)格式或者启用宏(xlsm)的工作簿。
代码
使用Dir函数查找目录下的所有文件,然后使用工作簿集合(Workbooks)的Open打开文件,并另存为Excel (xlsx)格式。
Option ExplicitSub 批量转换工作薄()Dim oPath As String'原始文件路径Dim oFName As String '原始文件名Dim dPath As String'目标文件路么Dim dFName As String '目标文件名oPath = ThisWorkbook.Path & "\原工作薄"dPath = ThisWorkbook.Path & "\转换结果"'打开工作薄时强制禁止宏Application.AutomationSecurity = msoAutomationSecurityForceDisableApplication.DisplayAlerts = FalseoFName = Dir(oPath & "*.xls")Do While oFName <> ""With Workbooks.Open(oPath & oFName)If .HasVBProject ThendFName = oFName & "m".SaveAs dPath & dFName, xlOpenXMLWorkbookMacroEnabledElsedFName = oFName & "x".SaveAs dPath & dFName, xlOpenXMLWorkbookEnd If.Close FalseEnd WithoFName = DirLoopApplication.AutomationSecurity = msoAutomationSecurityByUIApplication.DisplayAlerts = TrueEnd Sub
使用HasVBProject属性判断工作簿是否有代码
Excel文件的格式仅能通过SaveAs方法另存工作簿而实现。在Excel 以前,对一般的工作簿而言,无论是否在其中有程序,均以xls格式存储。而自Excel 开始,带有程序的工作簿则必须保存为启用宏的工作簿(xlsm)格式,否则所有的代码将被删除。因而,首先需要判断工作簿是否有代码。而Workbook对象的HasVBProject属性则可以反映某个工作簿是否有VB工程,即该工作簿是否有代码。当该属性为True时,则表明工作簿中含有代码,反之则没有代码。
禁止打开工作簿时执行程序
当工作簿中存在自动运行的宏代码(如写在Workbook的Open事件中的宏)时,那么在打开工作簿时,该宏代码会自动执行。而本例由于仅是简单的转换格式,因而不需要执行任何被
转换的工作簿的代码。为禁止打开工作簿时代码会自动运行,则应设置Application对象的AutomationSecurity属性的值。该属性是设置打开文件时的安全性级别,其值可以为中的任何一个常量。