2010-01-30 13 views
0

Excel VBA를 처음 만들었습니다.VBA의 실행 취소 처리기에 인수를 전달하는 방법

아래의 매크로는 기본적으로 셀 범위의 배경을 변경합니다.

GenerateMarkerOnSheet는 내부를 검은 색으로 설정합니다. ResetMarkerOnSheet는 실행 취소시 위의 변경 사항을 롤백하기위한 것입니다.

이전 인테리어를 실행 취소 핸들러 (ResetMarkerOnSheet) 에 인수로 전달할 수 있습니까? Application.OnUndo?

그렇다면 어떻게해야합니까?

Sub GenerateMarkerOnSheet() 
' 
' GenerateMarkerOnSheet Macro 
' Macro recorded 29/01/2010 by Everyone 
' 

' 

StartIndex = 99 

RangeGap = 100 

StartCell = "A" 

EndCell = "BU" 

PreviousBackground = 1 

Do While StartIndex < 65536 
    For Each c In Worksheets(ActiveSheet.Name).Range(StartCell & StartIndex & ":" & EndCell & StartIndex) 
     If PreviousBackground = 1 Then 
      PreviousBackground = c.Interior.ColorIndex 
     End If 
     c.Interior.Color = RGB(0, 0, 0) 
    Next 
    StartIndex = StartIndex + RangeGap 
Loop 
' How to pass PreviousBackground to the call below 
Application.OnUndo "Undoing", "ResetMarkerOnSheet" 


End Sub 


Sub ResetMarkerOnSheet() 
' 
' ResetMarkerOnSheet Macro 
' Macro recorded 29/01/2010 by Everyone 
' 

' 

StartIndex = 99 

RangeGap = 100 

StartCell = "A" 

EndCell = "BU" 

Do While StartIndex < 65536 
    For Each c In Worksheets(ActiveSheet.Name).Range(StartCell & StartIndex & ":" & EndCell & StartIndex) 
     c.Interior.ColorIndex = PreviousBackground 
    Next 
    StartIndex = StartIndex + RangeGap 
Loop 


End Sub 

답변

0

VBA 코드를 통해 실행 된 작업을 실행 취소 할 수 있다고 생각하지 않습니다. 예를 들어 셀의 값을 수동으로 오버 타이핑하면 편집> 실행 취소를 통해 이전 값으로 되돌아 갈 수 있습니다. 그러나 값 (Range ("a1") = "New Value")을 변경하는 코드를 사용하면 실행 취소 할 수 없습니다.

사용자가 수행 할 때마다 영향을받는 셀의 주소 또는 범위를 저장하는 코드를 GenerateMarkerOnSheet 코드에 추가하는 것이 좋습니다. 아마도 숨겨진 워크 시트 나 명명 된 범위에 주소/범위를 저장할 수 있습니다.

ResetMarkerOnSheet 루틴은 저장된 주소/범위의 배경을 변경합니다.

코딩 방법에 따라 여러 수준의 "실행 취소"를 저장할 수 있습니다.

+0

감사하지만 'Application.OnUndo'에서 실행 취소 처리기를 제공 할 수 있습니다. 숨겨진 작업 표를 사용하는 것이 좋습니다. 나는 그것을 줄 것이다! – Everyone

관련 문제