2013-07-21 1 views
0

목표 : 시트 1의 A1 : A2 값이 변경되면 시트 2의 A1 : A2 값이 다음과 같이 자동으로 업데이트됩니다. 이 값들. 다음 시트 1 이벤트 핸들러가 작동하지 : 평소처럼시트 1을 자동으로 시트 2에 복사 A1 : A2를 A1 : A2로 변경했을 때

Private Sub Worksheet_Calculate() 

Application.EnableEvents = False 

Dim target As Range 
Set target = Range("A1:A2") 

    If Not Intersect(target, Sheets(2).Range("A1:A2")) Is Nothing Then 
     Range("A1:A2").Value = Sheets(2).Range("A1:A2").Value 
    End If 

Application.EnableEvents = True 

End sub 

, VBA의 마음 numbingly 불투명 구문 내 몰락이다. VBA의 숨겨진 세부 사항을 설명하는 데 실제로 유용한 VBA 참조 가이드를 참조하면 위의 간단한 작업을 구현하는 데 도움이 될 것입니다.

+2

만 Sheet1에있는 이벤트에 응답 할 Sheet1의 모듈에서 이벤트 핸들러입니다. sheet2에서 이벤트를 catch하려면 해당 시트의 코드 모듈에서 핸들러가 필요합니다. –

+0

실제로 유용한 _VBA 참조 안내서 : 이미 여기 있습니다 ... –

+0

나는 Ted의 제안을 아래에 시도했지만 성공하지 못했습니다. 즉, 이벤트 처리기를 시트 1 코드 모듈에 넣습니다. 시트 1의 셀이 변경되면 시트 2의 셀이 예상대로 변경되지 않습니다. 방법이 있어야합니다. – jmaz

답변

1

다른 사람들이 말했듯이 모니터링 할 시트에 이벤트 처리기를 배치해야합니다.

Worksheet_Change은 사용자가 만든 의 변경 사항에 응답합니다. 셀이 다른 이유로 인해 변경된 경우 (예 : 수식 계산)이 이벤트는 호출되지 않습니다.

Worksheet_Calculate은 시트 재 계산에 응답합니다. 시트에 어떤 셀이 바뀌 었는지에 대한 개념이 없습니다. 사용 사례에 그것을 사용하거나에 관계없이 셀을 복사하고 일부 unnecassary 사본을, 또는 변경 코드에

노트에 복사 A1:A2의 자신을 값을 추적합니다 수락하려면 :

  • 규정되지 않은 참조 Range은 코드가 들어있는 워크 시트를 참조하십시오. Me도 마찬가지입니다.
  • CodeName 시트를 참조하여 사용자가 호출 한 시트 또는 이동 한 시트에 관계없이 특정 시트를 참조 할 수 있습니다. 다른 시트에 범위의 Intersect을 시도
  • 더 sence을하지 않으며
  • Sheets(1)Sheet1가 동일한 워크 시트 수 없습니다 오류 것입니다. Sheets 모음 색인은 시트가 Excel에 표시된 순서대로 표시되며 사용자가 변경할 수 있습니다.

여기에 코드의 리팩토링 (시트 2 장 1에 변경 내용을 복사 할 시트 1 개 모듈이를 넣어)

Private Sub Worksheet_Calculate() 
    If Sheet2.Cells(1, 1).Value <> Me.Cells(1, 1).Value Or _ 
     Sheet2.Cells(1, 2).Value <> Me.Cells(1, 2).Value Then 

     Application.EnableEvents = False 
     Sheet2.Range("A1:A2").Value = Me.Range("A1:A2").Value 
     Application.EnableEvents = True 
    End If 

End Sub 
+0

사실, VBA 코드로 수행 된 워크 시트를 변경하면 Worksheet_Change가 트리거됩니다. – mattboy

+0

@mattboy, thx가 변경되었습니다. 그것 –

+0

귀하의 제목 (질문의 본문 여전히 일치 말합)에 맞게 업데이 트하고'If' 문 –

관련 문제