Excel 2013和2016之间是否存在与宏的兼容性问题

时间:2017-09-27 08:42:09

标签: excel vba excel-vba excel-2003 excel-2016

我们的用户拥有一个带有宏的旧97-2003 Excel文档,他们在2013年使用并运行时没有问题。

我们现在已经在周末升级到2016,当运行工作簿中的第一个宏时,通常会向我们显示值的单元格现在显示为#REF!

奇怪的是,如果我们在宏运行后手动更正了一些引用,那么再次运行宏,它第二次没有相同的问题。

我们想知道2016年是否有任何可能导致宏以这种方式行为的变化?

我们正在运行的第一个宏如下:

Sub Update()
'
' Macro1 Macro
' Macro recorded 28/06/2007 by PETER WILSON
''
'
    Sheets("DCodes2").Select
    Range("C4").Select
    Application.CutCopyMode = False
    Selection.QueryTable.Refresh BackgroundQuery:=False
    Sheets("Summary").Select
    Range("D23").Select
    Sheets("Sales Inv").Select
    Range("a2").Select
    Selection.QueryTable.Refresh BackgroundQuery:=False
    Range("K5").Select
    Sheets("Invoices").Select
    Selection.QueryTable.Refresh BackgroundQuery:=False
    Sheets("Job Costs").Select
    ActiveWindow.LargeScroll ToRight:=-1
    Range("C2").Select
    Selection.QueryTable.Refresh BackgroundQuery:=False
    ActiveWindow.SmallScroll ToRight:=6
    Range("N2:T2").Select
    Selection.AutoFill Destination:=Range("N2:T284")
    Range("N2:T284").Select
    Range("N3").Select
    Range("J28").Select
    Sheets("Job Costs").Select
    ActiveWindow.SmallScroll ToRight:=-1
    Range("N2:T2").Select
    ActiveWindow.LargeScroll ToRight:=-2
    ActiveWindow.SmallScroll ToRight:=9
    Selection.AutoFilter Field:=1
    Range("N2:T2").Select
    Selection.Copy
    Range("N3").Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveSheet.Paste
    Sheets("Daybook").Select
    Range("B2").Select
    Application.CutCopyMode = False
    Selection.QueryTable.Refresh BackgroundQuery:=False
    Sheets("Job Costs").Select
    Range("N2:U2").Select
    Sheets("Summary").Select
    Range("I8").Select


'
End Sub

我不清楚宏应该做什么,所以我犹豫不决,如果我出错了,我会尝试手动纠正用户,而且我对Visual不太了解基本来确定上面代码在每一步中做了什么。

2 个答案:

答案 0 :(得分:0)

看起来有些原始代码被录制了。这(下面)似乎提供相同的功能,删除无关和不必要的代码。 (但我当然不能看到原始的表格,所以要谨慎对待)

Sub EquivalentFunctIonality
Dim qt as QueryTable
Dim ws as Worksheet
For each ws in Worksheets
For Each qt in ws.querytables
qt.refresh BackgroundQuery:=False
Next qt
next ws
With Worksheets("Job Costs")
.Range("N2:T2").Copy .range(Range("N3"),.range("n3").End(xlDown))
End With
End Sub

看看这是否仍然存在错误。

答案 1 :(得分:0)

目前我还未能找到与此问题相关的2016年任何变化。

我刚刚对第一次运行宏生成的无效引用进行了手动更正,并允许它重新运行(显然每次都成功运行)。

我已经要求最终用户持续监控工作簿中的数据以确保其准确性,并且将以类似的方式处理具有相同类型问题的任何未来工作簿。