Excel 2013与2016之间的宏是否存在任何兼容性问题
问题描述:
我们有一位用户使用旧版97-2003 Excel文档,其中包含宏,这些宏正在2013年使用并运行,没有问题。Excel 2013与2016之间的宏是否存在任何兼容性问题
我们现在已经升级至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
我不是什么宏应该做清楚的,所以我很犹豫要经过,并尝试手动正确的用户case我得到了一些错误,并且我不太了解Visual Basic来确定上面的代码在每个步骤中都在做什么。
答
看起来像一些原始代码被记录。这(下面)似乎给出相同的功能,删除多余和不必要的代码。 (但我看不到原来的床单,当然这样慎重对待)
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
看看这是否仍然给出错误。
答
目前我还没有找到任何可能与此问题有关的2016年变化。
我刚才提出的手动校正由宏首次运行时产生的无效引用,并允许它重新运行(显然是成功以后每一次)。
我已要求最终用户不断监测工作簿中的数据,以确保它是正确的,并且将解决任何未来的工作簿以类似的方式,同一种问题。
“*我不清楚宏应该做什么*”如果即使*你*不知道代码在做什么,我们该如何帮助?代码看起来像是值得彻底重写它(看起来像一堆坏习惯),但是因此您需要知道它应该先做些什么。 –
由于该宏是在10年前记录的,我们大多数IT人员和使用该报告的最终用户当时都不在公司。记录宏的用户不再使用该业务,所以我们不能问他们宏观背后的意图是什么。最终用户可以告诉我们他们期望通过宏来调整哪些字段,并且明显突出显示了错误,但我的意思是,我不知道宏如何实现其目标(即实际的代码)。 – Eds
我了解你的情况,但我没有机会在这里找到这样的问题。代码不会做任何壮观的事情,只需一个复制粘贴操作,一个自动填充操作(可能会复制一个公式)并刷新一些查询表。而已。但几乎不可能说出你刚才展示的这段代码的外观出了什么问题(看起来很乱,因为它被录制了,但我没有看到任何问题)。这可能是提出这样一个问题的错误地方。或者,您需要聘请能够检查整个文件的人,包括公式和查询表。 –