2017-09-27 1 views
-1

2013 년에 문제없이 사용 중이었던 매크로가있는 이전 97-2003 Excel 문서가있는 사용자가 있습니다.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 

I 매크로이해야 할 내용에 명확하지 않다, 그래서 나는 통과하고 사용자에 대한 수동으로 올바른을 시도 주저 :

우리가 실행하는 첫 번째 매크로는 다음과 같습니다 case 내가 뭔가 잘못 됐어. 위의 코드가 각 단계에서 무엇을하는지 결정하기에 Visual Basic에 대해 충분히 알지 못한다.

+0

"매크로가 수행해야하는 작업이 명확하지 않습니다. *"코드가 무엇을하는지 모르는 경우 어떻게 도와 드릴까요? 코드는 완전히 다시 써야 할 가치가있는 것처럼 보이지만 (나쁜 습관이 엉망으로 보이는 것처럼 보이기 때문에) 먼저 코드가 무엇을해야 하는지를 알아야합니다. –

+0

매크로가 10 년 전에 기록 되었기 때문에 IT 부서의 대다수 사용자와 보고서를 사용하는 최종 사용자는 그 당시의 회사가 아니 었습니다. 매크로를 기록한 사용자는 더 이상 사업을하지 않으므로 매크로의 의도가 무엇인지 물어볼 수 없습니다. 최종 사용자는 매크로가 조정할 것으로 예상되는 필드를 알려주고 분명히 오류를 강조 표시 할 수 있지만 내 성명서가 의미하는 바는 매크로가 목표를 달성하는 방법 (예 : 실제 코드). – Eds

+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 

여전히 오류가 발생하는지 확인하십시오.

0

현재이 문제와 관련 될 수있는 2016 년 변경 사항을 찾을 수 없었습니다.

매크로의 첫 번째 실행에서 생성 된 잘못된 참조를 수동으로 수정하여 다시 실행하도록했습니다 (이후의 모든 시간이 성공적으로 완료 됨).

최종 사용자에게 통합 문서의 데이터를 지속적으로 모니터링하여 정확한지 확인하고 비슷한 종류의 문제가있는 향후 통합 문서를 비슷한 방식으로 처리하도록 요청했습니다.

관련 문제