2012-03-14 3 views
0

worksheet1을 붙여 넣었습니다. 기둥을 확인하십시오. 모니터링 할 대상은 설명 및 건강 관리 인입니다. 변경이 열에서 변경되면 S가 삽입됩니다. 예 : 스펙타클 프레임이 사양 프레임으로 변경되면 변경 사항 아래에 S를 삽입합니다. 변경 열은 원래 비어 있습니다. Healthman에서 가격이 변경되면 변경 열에 P가 삽입됩니다. 제품을 삭제할 때, 즉 행을 삭제할 경우 변경 아래에 X가 삽입됩니다. 행이 삽입 될 때 셀에 의해 숨겨진 시트 셀과 비교 되었기 때문에 숨겨진 시트가 업데이트 된 이유가 있습니다. 나는 그것이 작동하지 않는 이전 코드를 시도하고 귀하의 검토를 위해 시트를 붙여 생각.
전설 : P = 가격 변경
N = NEW X = DELETED S = 설명
코드 변경 설명 HEALTHMANExcel 셀 값이 변경되면 다른 셀에 "S"가 삽입됩니다.

40501  Spectacle Frame    
    40609  Sunglasses    
    40525 S Ready Made Optical    
    41008  Spectacle Case    
    43025 P Transfer - Zyl or Metal Frame 198.00   
    43126 P Transfer - Nylon Supra Frame 314.00   
    43136 P Transfer - Rimless Frame 359.00  

답변

0

당신은 Worksheet_Change 이벤트를 사용할 수 있습니다. 예를 들어 thisthat을 참조하십시오. -

샘플 코드가 Workseet에 추가 할 다른 셀을 변경할 때 변경된 셀 A1의 경우 A3 자동으로 특정 행동 변경됩니다 :

Worksheet_Change와 함께 작업하는 동안
Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address = Range("A1").Address Then 
     Range("A3") = "You changed A1" 
    ElseIf Target.Address <> Range("A3").Address Then 'to prevent a change of A3 to trigger an update 
     Range("A3") = "You changed another cell" 
    End If 
End Sub 
+0

내가주의 관련 시트 영역에 들어가 난 그냥 거기에 값이나 텍스트를 변경하지 않고 셀을 클릭하면, 그것을 다음 셀에 값 "S"를 삽입합니다.숨겨진 워크 시트에 원래 값을 유지하거나 저장할 수있는 방법이 있으며 셀의 종료시 셀 값과 비교할 수 있습니다. 이렇게하면 마우스 클릭에서 진정한 변화를 구별 할 수 있습니다. – Sithelo

5

당신은 2 가지를 확인해야 .

1) 적절한 에러 처리는 무한 루프의 가능성을 방지 .EnableEvents을 끄고 필수

2)이다.

가정들

1) 당신은 당신은

그래서 같이 적용 변경하십시오 A2에 "S"를 표시 할 셀 A1

2)에 변화를 캡처 할 아래의 코드. 이것은 당신이 시도하고있는 무슨

CODE

Private Sub Worksheet_Change(ByVal Target As Range) 
    On Error GoTo Whoa 

    If Not Intersect(Target, Range("A1")) Is Nothing Then 
     Application.EnableEvents = False 
     Range("A2").Value = "S" 
    End If 

LetsContinue: 
    Application.EnableEvents = True 
    Exit Sub 
Whoa: 
    MsgBox Err.Description 
    Resume LetsContinue 
End Sub 

후속

인가?

"ThisWorkbook"코드 영역에 표시됩니다.

Private Sub Workbook_Open() 
    Dim hiddenSheet As Worksheet 

    Set hiddenSheet = Me.Worksheets.Add 
    hiddenSheet.Visible = xlSheetVeryHidden 

    On Error Resume Next 
    Application.DisplayAlerts = False 
    Sheets("HiddenSheet").Delete 
    Application.DisplayAlerts = True 
    On Error GoTo 0 

    hiddenSheet.Name = "HiddenSheet" 

    Sheet1.Range("A1:D15").Copy hiddenSheet.Range("A1:D15") 
End Sub 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    On Error Resume Next 
    Application.DisplayAlerts = False 
    Sheets("HiddenSheet").Delete 
    Application.DisplayAlerts = True 
    On Error GoTo 0 
End Sub 

이것은

Private Sub Worksheet_Change(ByVal Target As Range) 
    On Error GoTo Whoa 

    If Not Intersect(Target, Range("A1:D15")) Is Nothing Then 
     Dim old_value 

     Application.EnableEvents = False 

     old_value = Sheets("HiddenSheet").Range(Target.Address).Value 

     If Target.Value <> old_value Then 
      '~~> Change 1 to whatever offset that you want. 
      Target.Offset(0, 1).Value = "S" 
     End If 
    End If 

LetsContinue: 
    Application.EnableEvents = True 
    Exit Sub 
Whoa: 
    MsgBox Err.Description 
    Resume LetsContinue 
End Sub 

HTH

시드가

+0

EnableEvents에 +1, 내 끔찍한 해킹보다 훨씬 낫다 ... – assylias

+0

http://wikisend.com/download/899026/sample.xlsm – Sithelo

+0

나는 당신이 무엇을하려고하는지 안다. 내가 제공 한 코드는 작동하지만 필요에 맞게 수정해야합니다. 업로드 한 파일에 내가 제공 한 코드가 없습니다. 위 코드를 사용하고 필요한 사항을 변경해야합니다. 한 번 완료되면 코드를 이해할 수 있도록 파일을 다시 업로드하십시오. 또한 이것은 너무 오래갑니다. 링크가있는 게시물을 제외한 위의 모든 의견을 삭제할 수 있습니까? 그리고 나는 똑같이 할 것입니다 –

관련 문제