programing

셀 변경 시 Excel 매크로 자동 실행

mailnote 2023. 5. 26. 22:09
반응형

셀 변경 시 Excel 매크로 자동 실행

특정 셀의 값이 변경될 때마다 Excel 매크로를 자동으로 실행하려면 어떻게 해야 합니까?

현재 제 작업 코드는 다음과 같습니다.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("H5")) Is Nothing Then Macro
End Sub

어디에"H5"특정 세포가 모니터링되고 있는지,Macro는 매크로의 이름입니다.

더 좋은 방법이 있습니까?

코드가 꽤 좋아 보이네요.

하지만, 당신의 전화는 조심하세요.Range("H5")에 대한 바로 가기 명령입니다.Application.Range("H5")와 동등한.Application.ActiveSheet.Range("H5")가장 일반적인 변경 사항인 사용자 변경 사항만 변경하는 경우에는 문제가 없지만, VBA와 같은 프로그램 변경을 통해 활성 시트가 아닐 때 워크시트의 셀 값이 변경될 수 있습니다.

이것을 염두에 두고, 저는 다음과 같은 것을 활용할 것입니다.Target.Worksheet.Range("H5"):

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Target.Worksheet.Range("H5")) Is Nothing Then Macro
End Sub

또는 사용할 수 있습니다.Me.Range("H5")이벤트 핸들러가 해당 워크시트의 코드 페이지에 있는 경우(일반적으로 해당):

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("H5")) Is Nothing Then Macro
End Sub

저는 이것을 연구하고 어떻게 작동하는지 배우는데 많은 시간을 보냈습니다. 이벤트 트리거를 정말 엉망으로 만든 후에 말이죠.너무 많은 정보가 흩어져 있었기 때문에, 저는 제가 발견한 모든 것을 한 곳에서 다음과 같이 차근차근 공유하기로 결정했습니다.

VBA 프로젝트(Your WorkBookName.xlsm)에서 VBA 편집기를 열고 Microsoft Excel 개체를 열고 변경 이벤트와 관련된 시트를 선택합니다.

기본 코드 보기는 "일반"입니다.가운데 상단의 드롭다운 목록에서 "워크시트"를 선택합니다.

개인 하위 워크시트_선택 변경이 원래대로 이미 존재하므로 그대로 둡니다.위에서 Mike Rosenblum의 코드를 복사/붙여넣고 를 변경합니다.변경 사항을 감시하는 셀에 대한 범위 참조(B3의 경우).그러나 매크로를 아직 배치하지 마십시오. ("그때" 뒤에 "Macro"라는 단어를 제거했습니다.)

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("H5")) Is Nothing Then
End Sub

또는 왼쪽 상단의 드롭다운 목록에서 "변경"을 선택하고 개인 하위 항목과 끝 하위 항목 사이의 공간에 붙여넣습니다.If Not Intersect(Target, Me.Range("H5")) Is Nothing Then

"그러면" 다음 줄에서 매크로를 호출할 때 이벤트가 트리거되지 않도록 이벤트를 끄고 이 워크시트를 다시 실행합니다. 이 워크시트는 Excel이 충돌하거나 모든 것이 엉망이 되는 끝없는 주기로 변경됩니다.

Application.EnableEvents = False

매크로 호출

Call YourMacroName

다음 변경 사항(및 기타 모든 이벤트)이 트리거되도록 이벤트를 다시 켭니다.

Application.EnableEvents = True

If 블록과 하위 블록을 끝냅니다.

    End If
End Sub

전체 코드:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("B3")) Is Nothing Then
        Application.EnableEvents = False
        Call UpdateAndViewOnly
        Application.EnableEvents = True
    End If
End Sub

모듈에서 이벤트를 켜거나 끄면 문제가 발생하고 변경 트리거, 이벤트를 끄거나 매크로를 실행하고 이벤트를 다시 켤 수 있습니다.

를 합니다.Worksheet_Change 이트또는벤.Workbook_SheetChange이벤트

이벤트 핸들러는 "Target As Range" 인수를 사용하므로 변경되는 범위에 관심 있는 셀이 포함되어 있는지 확인할 수 있습니다.

나는 셀이 아닌 범위를 사용하는 이 방법을 선호합니다.

    Dim cell_to_test As Range, cells_changed As Range

    Set cells_changed = Target(1, 1)
    Set cell_to_test = Range( RANGE_OF_CELLS_TO_DETECT )

    If Not Intersect(cells_changed, cell_to_test) Is Nothing Then 
       Macro
    End If

나는 온라인 주식 데이터베이스에 연결되어 있고 자주 업데이트되는 셀을 가지고 있습니다.셀 값이 업데이트될 때마다 매크로를 트리거합니다.

저는 이것이 프로그램이나 외부 데이터 업데이트에 의한 셀 값 변경과 비슷하다고 생각하지만 위의 예들은 어떻게든 저에게는 통하지 않습니다.엑셀 내부 이벤트가 트리거되지 않아서 문제라고 생각합니다만, 제 추측으로는 그렇습니다.

저는 다음과 같이 했습니다.

Private Sub Worksheet_Change(ByVal Target As Range) 
  If Not Intersect(Target, Target.Worksheets("Symbols").Range("$C$3")) Is Nothing Then
   'Run Macro
End Sub

언급URL : https://stackoverflow.com/questions/409434/automatically-execute-an-excel-macro-on-a-cell-change

반응형