我們有一位用戶使用舊版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來確定上面的代碼在每個步驟中都在做什麼。
「*我不清楚宏應該做什麼*」如果即使*你*不知道代碼在做什麼,我們該如何幫助?代碼看起來像是值得徹底重寫它(看起來像一堆壞習慣),但是因此您需要知道它應該先做些什麼。 –
由於該宏是在10年前記錄的,我們大多數IT人員和使用該報告的最終用戶當時都不在公司。記錄宏的用戶不再使用該業務,所以我們不能問他們宏觀背後的意圖是什麼。最終用戶可以告訴我們他們期望通過宏來調整哪些字段,並且明顯突出顯示了錯誤,但我的意思是,我不知道宏如何實現其目標(即實際的代碼)。 – Eds
我瞭解你的情況,但我沒有機會在這裏找到這樣的問題。代碼不會做任何壯觀的事情,只需一個複製粘貼操作,一個自動填充操作(可能會複製一個公式)並刷新一些查詢表。而已。但幾乎不可能說出你剛纔展示的這段代碼的外觀出了什麼問題(看起來很亂,因爲它被錄製了,但我沒有看到任何問題)。這可能是提出這樣一個問題的錯誤地方。或者,您需要聘請能夠檢查整個文件的人,包括公式和查詢表。 –