2016-08-18 1 views
0

현재 수백 개의 행을 업데이트, 작성 및 제거하는 등의 다양한 기능을 수행하는 매크로 사용 스프레드 시트가 있습니다. 어떤 이유로 든이 함수 중 하나가 엉망이되어 보관하려는 정보를 삭제하는 경우 - 매크로에 의해 방금 변경된 스프레드 시트의 버전을 복원하는 "실행 취소"버튼을 구현하고 싶습니다.워크 시트의 전체 버전을 복원하는 VBA의 "실행 취소"단추

이 나는 ​​모양을 가정 다음 : 당신이 UndoLastMacro 명령을 활성화 할 때

Public InstanceOfWorksheet As Range 

Sub Button_Click() 
    InstanceOfWorksheet = CurrentWorksheet.UsedRange 'Or something like this 
    'Macro functionality here 
    CurrentWorksheet.Update() 'Worksheet has now been updated 
    End Sub 

Sub Button2_Click() 
    InstanceOfWorksheet = CurrentWorksheet.UsedRange 'Or something like this 
    'Second Macro functionality here 
    CurrentWorksheet.Update() 'Worksheet has now been updated 
    End Sub 

Sub UndoLastMacro_Click() 
    CurrentWorksheet = InstanceOfWorksheet 
    End Sub 

이 경우에, 당신은 효과적으로 당신이 마지막 매크로 전과 워크 시트의 버전을 "복원"것 라는.

내 질문에 어떤 변수 유형이 InstanceOfWorksheet이되어야하며 InstanceOfWorksheet의 내용을 현재 워크 시트에 다시 복사하는 가장 쉬운 방법은 무엇입니까?

미리 감사드립니다. :)

+0

당신은 목표 범위의 값을 유지하는 것이 더 이상 이에 대한 변수 범위 변수와 데이터 유형'Variant'와 배열 변수를 필요로 할 수 있습니다. 이는 변경 사항이 값과 관련이 있다고 가정합니다. 수식, 서식 등도 변경되면 훨씬 더 복잡해집니다. – Miqi180

+1

두 번째 생각에서 변경 사항이 적용되는 동안 오류가 발생하지 않으면 삭제되는 워크 시트의 임시 사본을 만드는 것이 더 쉽고 안전합니다. 마지막에 'Err.Number = 0'인 경우 'On error resume next'를 사용하고 임시 복사본을 삭제하십시오. – Miqi180

+0

'.UsedRange.Formula'를 저장하기 위해 새 워크 시트를 만드는 것이 더 나을지도 모릅니다. 모든 변경 사항이 기록되지 않는 한 VBA가 실행 취소하기는 어렵습니다. 또는 통합 문서의 복사본을 임시 폴더에 저장 하시겠습니까? – PatricK

답변

0

나는 코드에서 같은 것을 할 것

Sub Button_Click() 
    Dim TemporaryFileName as String 
    TemporaryFileName = "FileName" 'You can include a path here too like "C:\Wherever\FileName" 
    ThisWorkbook.SaveAs(TemporaryFileName) 
    ... (code to be run 
End Sub 

Sub Restore_Button_Click() 
    Workbooks.Open(TemporaryFileName) 
    ThisWorkbook.Close False ' Won't save. Maybe set to true if you don't want to lose it just yet 

End Sub 

당신은 아마 "새로운"백업 통합 문서를 대체 할 파일이 원래 불렀다 어떤 파일로 저장하기 버튼을 추가해야합니다 매크로에 의해 손상된 것.

희망이

+2

SaveAs는 통합 문서를 새 이름으로 변경합니다. SaveCopyAs는 통합 문서 이름을 변경하지 않고 복사본을 저장하기 때문에 더 좋습니다. –