在VBA中打开Excel 2007文件并将其另存为97-2003格式

4
我有一个奇怪的情况,我有一批扩展名为.xls的Excel文件,它们都在同一个目录下。我可以在Excel 2007中打开它们,但是在同一台计算机上的Excel 2003中无法打开它们,除非我先在2007中打开文件并将文件另存为“Excel 97-2003工作簿”。在从Excel 2007保存文件之前,在2003中打开Excel文件时会出现错误,提示文件格式不可识别。
所以我的问题是:如果我已经在2007中打开了Excel文件,并且已经将打开文件的文件名存储在一个变量中,那么如何在程序中模仿上移到右上角的“Office按钮”,选择“另存为”,然后选择“Excel 97-2003工作簿”的操作呢?我尝试了类似下面的代码,但它根本没有保存文件:
ActiveWorkbook.SaveAs TempFilePath & TempFileName & ".xls", FileFormat:=56

感谢任何帮助或指导!

我完全遇到了同样的问题。一个名为my_file_with_macro.xlsm的文件生成一些*.xls文件,以便与2003版的Excel兼容,但是我的同事们仍在运行Office 2003,无法打开这些文件。自从你在这里提问后,你有找到任何解决方案吗? - Nicolas C.
实际上,我刚刚找到了一个解决方案(虽然我并不认为它很干净,但是...无论如何,它对我有效)。Application.DisplayAlerts = False Set resultFile = Workbooks.Open(resultFileName) resultFile.CheckCompatibility = False resultFile.SaveAs Filename:=resultFileName, FileFormat:=xlExcel8 resultFile.Close Application.DisplayAlerts = True - Nicolas C.
6个回答

7

看起来你应该尝试使用兼容性包,但我不知道为什么你的vba代码无法运行。我尝试了下面的方法,它完美地运行了:

ThisWorkbook.SaveAs "C:\test" & ".xls", FileFormat:=56

我已经安装了兼容性包,但仍然无法正常工作。不确定原因。如果我将FileFormat:= 56删除,它可以正常保存,但是当我添加它时,它根本不会保存。有任何想法吗? - ABB
如果您尝试使用不同的文件名进行“另存为”,会发生什么? - Jay
我刚刚尝试了一下,但它没有起作用。我逐步检查了代码,并确保它执行了那行代码,但我不确定它是否与我的当前机器设置有关。我很困惑。 - ABB
我正在测试的机器上安装了2003和2007两个版本(我在2007中运行了代码),但我不确定这是否会有影响。 - burnside
我在另一台与我的设置类似的机器上尝试了一下,(都安装了2003和2007),结果它可以正常工作。非常奇怪。很抱歉浪费了您的时间,我想这只是因为我的机器设置出了一些非常奇怪的问题。 - ABB
没问题。Excel 可能有点难搞。 - burnside

2
这是一个对我有效的解决方案。基本上,它重新打开同一文件,并使用 Excel 97-2003 的兼容性模拟“另存为”Office 按钮。但是,它会隐藏任何警报并指定 Excel 不检查兼容性,从而生成一个弹出窗口,防止您在批处理模式下静默工作。
'before that, my code was using Workbooks.Add method, saving and then closing.
'just add the following after your last operation, once your file is closed where
'of course "resultFile" is the workbook to be saved, and resultFileName the path

Application.DisplayAlerts = False
Set resultFile = Workbooks.Open(resultFileName)
resultFile.CheckCompatibility = False
resultFile.SaveAs Filename:=resultFileName, FileFormat:=xlExcel8
resultFile.Close
Application.DisplayAlerts = True

1

0

不知道为什么兼容性包无法工作。我正在尝试创建一个应用程序来转换这些文件。 - ABB

0
'this script is created by me. But usable to vbscript ( vbs ).
UTILIZAR EL ARCHIVO INICIAL.XLSX COMO COMODÍN PARA CREAR UN ARCHIVO DATOS.XLS.

'Creado por Juan Fernando Arango Trujillo
Set app = CreateObject("Excel.Application")
app.Visible = False
app.DisplayAlerts = False
Set fso = CreateObject("Scripting.FileSystemObject")
Set wb = app.Workbooks.Open("C:\Users\Juan\Documents\Inicial.xlsx") 
wb.SaveAs "C:\Users\Juan\Documents\Datos.xls",  -4143
wb.Close True
app.Quit
Set app = Nothing
Set fso = Nothing

'数据创建过程已完成.XLS


如果您能翻译这个API并添加一些解释,那就太好了。 - CAFEBABE

0

只需要关闭警报也可以。 Application.DisplayAlerts = False Workbooks.Add.SaveAs 名称, FileFormat:=56 * 如果有必要,对文件进行修改 Activeworkbook.close SaveChanges:=true Application.DisplayAlerts = True


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