2013-11-28 2 views
4

대상 셀에 목록 상자를 여는 Worksheet_BeforeDoubleClick 이벤트가 있습니다. 더블 클릭 대신 버튼을 통해 (또는 추가로) 동일한 기능을 제공하라는 요청을 받았습니다.Excel VBA : 코드에서 이벤트를 트리거하는 방법?

Call Worksheet_BeforeDoubleClick(Selection,true) 

을 ... 그래서 버튼을 단순히 "하고 DoubleClick"셀 :

버튼의 클릭 이벤트에서 나는 들어갔다. 잘 작동하는 것 같지만 프로젝트 전반에 걸쳐이 기술을 사용하기 전에주의해야 할 함정이 있는지 알고 싶습니다.

다른 이벤트 또는 표준 코드 모듈에서 이벤트를 호출 할 때 가장 좋은 방법은 무엇입니까?

+3

귀하의 행동을 수행하는 공용 서브 또는 기능을 정의하는 것이 어떨까요? 그러면 언제든지 BeforeDoubleClickEvent 내부를 포함하여 원하는대로 호출 할 수 있습니다. – Sam

+0

예 큰 함정이 있습니다. 대답을 게시하겠습니다 ... –

+0

두 분 모두에게 감사드립니다. 샘, 당신의 제안을 시도하고 있지만 이벤트 모듈의 모든 코드를 표준 모듈로 옮기는 것은 복잡해 보입니다. 참조 할 컨트롤이 많아서 더 이상 "Me.CancelButton"이라고 말할 수 없습니다. 내가 이것에 대해 읽을 수있는 곳을 아십니까? –

답변

5

내가 알고 있어야하는 함정이 있는지 알고 싶습니다.

예 큰 함정이 하나 있습니다. Selection은 반드시 범위가 아닐 수도 있습니다.

  • 차트에 이미지를 삽입 빈 차트

  • 를 삽입 버튼을 삽입 예

    1. 를 참조하십시오. 이미지가

    을 강조하자

    enter image description here

    은의 우리가

    Private Sub CommandButton1_Click() 
        Call Worksheet_BeforeDoubleClick(Selection, True) 
    End Sub 
    
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 
        MsgBox Target.Address 
    End Sub 
    

    지금 버튼을 누르면이 코드가 있다고 가정하자 오류가 발생합니다.

    enter image description here

    워크 시트 이벤트 의지 화재 때 너무 NEED ... 그들은 선택이 적합하지 않을 때는 않습니다.

    Private Sub CommandButton1_Click() 
        '~~> Check if what the user selected is a valid range 
        If TypeName(Selection) = "Range" Then 
         Call Worksheet_BeforeDoubleClick(Selection, True) 
        Else 
         MsgBox "Not a Valid Range" 
        End If 
    End Sub 
    
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 
        MsgBox Target.Address 
    End Sub 
    

    같은 명령 버튼 코드가 ​​작동을하지만 여기서 모든 것과 모든 수표 당신이 가장 좋은 방법 :) 배치됩니다 것은에 배치하는 것입니다 수 가졌어요 @Sam으로 서브가 제안 된 다음 Button/Worksheet_BeforeDoubleClick에서 호출하십시오.

    버튼에서 호출하려면 적절한 오류 처리기를 포함하여 모든 관련 검사가 제대로 수행되었는지 확인하십시오.

  • +3

    +1'TypeName()'은 매우 유용합니다. – Sam

    +1

    위대한 분석 및 설명 –

    관련 문제