MS Excel 2010和MS Excel 2013之间的macros处理差异

我目前正在修改2005年初制作的并在以前版本的Excel上运行的macros。 最近它在MS Excel 2010中使用,但我使用MS Excel 2013来修改代码。 会不会有任何影响或兼容性问题?

解释在不同版本的Excelsmacros处理的链接将非常赞赏。 谢谢。

下面是一个“疑难杂症”:在Excel 2007中,微软推出了“大网格”。 这是用户可能开始利用的可用行数和列数的巨大提升。

也许你在2005年有一个有远见的团队为你的业务写VBA,但在我的老演出中,以下是确定最后一行的现状:

LastRow = Range("A65536").End(xlUp).Row 

如果2007年,2010年或2013年的工作表中有超过65,536个填充行,则上述内容不会返回预期的结果,并且旧脚本将失败,或者更糟糕的是,将返回错误的结果。

您应该嗅出上面的最后一行(或最后一列)标识,并使用@SiddharthRout在find最后一行的权威post中描述的技术对其进行重构: 在VBA中查找上次使用的单元格时出错 …简而言之:

查找列中的最后一行 (下面查找Sheet1上列A中最后占用的行)

 With Sheets("Sheet1") LastRow = .Range("A" & .Rows.Count).End(xlUp).Row End With 

查找工作表中的最后一行 (下面使用CountA来防止空Sheet1)

 With Sheets("Sheet1") If Application.WorksheetFunction.CountA(.Cells) <> 0 Then lastrow = .Cells.Find(What:="*", _ After:=.Range("A1"), _ Lookat:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False).Row Else lastrow = 1 End If End With