Excel应用版本号和文档的版本号

作者:iamlaosong

首先要说这是两个不同的东东,一个指excel应用本身的版本号,是软件程序,比如Excel2007,另一个是指Excel文档保存格式。在进行VBA编程时,写好的宏往往要在不同的版本下使用,其本身可以用不同的版本保存,VBA处理的文档也可能是不同的版本,有时,同一问题的处理,不同的版本处理有可能不一样,这就需要判断Excel应用的版本号和文档的版本号,以便做针对性的处理。比如,取工作表的有效行数,Excel2003和2007是不同的,就需要先判断文档的类型,再取行数:

Excel2003采用语句:maxrow = [A65536].End(xlUp).Row
Excel2007采用语句:maxrow = [A1048576].End(xlUp).Row
判断应用的版本和文档的版本,见下面程序:

Sub tt()
   Do While True
       MsgBox Application.Version
       MsgBox ActiveWorkbook.FileFormat
   Loop
End Sub

Application.Version取值("8.0", "9.0", "10.0", "11.0", "12.0", "14.0")对应的版本是("97", "2000", "2002", "2003", "2007", "2010"),而文档版本号是个数值,目前常见的有56(excel2003一般是这种格式)、51(excel2007普通文档用这种格式)、52(excel2007带有宏的文档用这种格式),其它格式见下面链接,不过其中名称的翻译是机器干的,有点够呛,幸好有提示此文章由机器翻译。 将光标移到文章的句子上,以查看原文。”。

需要注意的是:同一文件在不同版本的Excel下检测的结果是不一样的,实测表明,Excel2003保存的文件(扩展名是xls)在2003环境检测的版本值是-4143(常规工作簿),在2007环境检测的版本值是56(Excel8),而Excel2007文档(扩展名是xlsx),两种环境下检测都是51(默认工作簿,也就是开放XML格式工作簿)。

为保持兼容性,采用下面的检测语句:

            If Application.Version >= "12.0" And (ActiveWorkbook.FileFormat = 51 _

                Or ActiveWorkbook.FileFormat = 52) Then

                maxrow = Cells(1048576, pos_ems).End(xlUp).Row
            Else
                maxrow = Cells(65536, pos_ems).End(xlUp).Row
            End If

xlFileFormat枚举

你可能感兴趣的:(Excel应用版本号和文档的版本号)