2017-09-27 23 views
-1

2013年に問題なく使用されていたマクロを持つ古い97-2003 Excelドキュメントを持つユーザーがいます。Excel 2013と2016の間にマクロとの互換性の問題があります

週末に2016にアップグレードしました。ブック内の最初のマクロを実行すると、通常は値が表示されるセルで#REF!

奇妙なことに、マクロの実行後に手動で参照の一部を修正してからマクロを再度実行すると、2回目に同じ問題は発生しません。

マクロがこのように動作する可能性のある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 Basicについて十分に知りません。

+0

"マクロが何をすべきかについてはっきりしていない*"コードが何をしているのか分からなければどうすれば助けてくれるだろうか?コードは完全に書き直す価値があるようですが(悪い習慣の混乱のように見えます)、最初に何をすべきかを知る必要があります。 –

+0

マクロは10年以上前に記録されていたため、IT部門の大部分とレポートを使用しているエンドユーザーは、当時会社でさえもなかったためです。マクロを記録したユーザーは、もはやビジネスに慣れていないので、マクロの背後にある意図が何であるかを尋ねることはできません。エンドユーザーは、どのフィールドがマクロによって調整されると予想されているのかを明らかにすることができますが、明らかにエラーを強調表示していますが、私の声明が意味するのは、マクロが目標を達成する方法)。 – Eds

+0

あなたの状況を理解していますが、ここでそのような問題を見つける機会はありません。このコードでは、何もすばらしいことはなく、1つのコピー貼り付けアクション、1つの自動記入アクション(おそらく数式をコピーする)、およびいくつかのクエリテーブルをリフレッシュすることはありません。それでおしまい。しかし、あなたが示したコード部分から出てくるものがここで間違っていると言うのは、ほとんど不可能です(記録されているので乱雑に見えますが、何も間違っているとは限りません)。このような質問をするのは間違った場所かもしれません。代わりに、数式やクエリテーブルなど、ファイル全体をチェックできる人を雇う必要があります。 –

答えて

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 

これはまだ誤りがあるかどうか参照してください。

0

現時点では、この問題に関連する2016年の変更は見つかりませんでした。

マクロの最初の実行で生成された無効な参照を手動で修正し、再実行することができました。

私は、ワークブック内のデータを継続的に監視して正確であることを確認し、同じ種類の問題を持つ将来のワークブックに同様の方法で対処するよう依頼しました。