2013-06-21 1 views
0

그래픽 네비게이션 시스템을 만들었으므로 사용자는 원하는 기록을 쉽게 찾을 수 있습니다. 저는 이것을 여러 폼에서 사용하고 있으며 다른 폼에서 사용할 것이므로 VBA 코드를 복사하여 붙여 넣는 대신 클래스에 코드를 표준화하려고합니다. 이렇게하면 모든 양식에서 동일한 변경을 수행하는 대신 한 곳에서 코드를 개선 할 수 있습니다.VBA 코드를 클릭에 바인딩하는 방법은 무엇입니까?

이것은 지금 어떻게 작동 :

Dim v As New clsNav 
Set v.button1 = Me.button1 
Set v.button2 = Me.button2 
v.init 

그리고 v.init에서

, 나는 클릭 같은 모든 이벤트를 설정합니다. 따라서 사용자가 button1을 클릭하면 지정된 메소드가 실행됩니다.

어떻게하면됩니까? 버튼 클릭에 대한

답변

1

사건이

Private Sub Button1_Click() 
    ' Your code 
End Sub 

모양을 그리고 그들은 각각의 형태의 뒤에있는 코드 내에 위치하고 있습니다. 코드를 재사용하려면 별도의 모듈에 하위 코드를 작성한 다음 이벤트에서 호출하면됩니다.

Private Sub Button1_Click() 
    call MySub() 
End Sub 

' This is in a module 
Private Sub MySub() 
    ' Your code 
End Sub 

이제 실행해야하는 코드가 해당 양식과 관련된 컨트롤을 사용하지 않는 한이 기능이 작동합니다. 이런 식으로 코드를 작성해야한다면 간단하게 컨트롤을 하위로 전달하는 대신 해당 컨트롤을 하위로 전달하는 것입니다. Name

예. 버튼을 클릭하면 TextBox가 오늘 날짜로 업데이트됩니다. 텍스트 상자에는 각 양식마다 다른 이름이 있습니다. txtDate1Form1이고 txtDate2Form2입니다. 당신이

How to add events to Controls created at runtime in Excel with VBA

시작하기에 좋은 장소처럼 보인다 런타임 동안이 작업을 수행하려는 경우 그래서 어떻게 보이는지

'Form 1 Button 
Private Sub Button1_Click() 
    call MySub(txtDate1) 
End Sub 

'Form 2 Button 
Private Sub Button2_Click() 
    call MySub(txtDate2) 
End Sub 

' This is in a module 
Private Sub MySub(t as TextBox) 
    t.Text = Date() 
End Sub 

입니다. 이것이 노력의 가치가있는 상황을 상상할 수는 없습니다.

+0

오케이. 귀하의 답변 주셔서 감사합니다! VBA에 대한 많은 경험이 없습니다. 제 일은 Access 데이터베이스를 만드는 것이기 때문에 그것을 사용합니다. 내 선택이 아니야. 그래서 당신이 노력할 가치가 있다고 생각하지 않는다면, 나는 당신의 말을 듣겠습니다.귀하의 회신을 기다리는 대신 계속해야하기 때문에 나는 이미 그것을하고있는 방법입니다 :) –

+0

내가 지금 할 일은 내가 클래스 모듈을 가지고있어서 form_load에 객체를 인스턴스화하고 Set obj.cControlName = Me.ControlName'을 입력 한 다음이 답변에서했던 것처럼 이벤트를 설정합니다. 답장을 보내 주셔서 다시 한 번 감사드립니다! –

0

필자는 frmCtrl이라는 일반 클래스를 사용합니다.이 클래스에는 WithEvents 포인터가 다양한 컨트롤 유형에 대해 해당 이벤트 (클릭, dbl 클릭 등)로 설정되어 있습니다. 그런 다음 해당 클래스에서 해당 개체를 "설정"하는 함수가 있으므로 컨트롤을 전달하고 해당 함수를 올바른 형식의 개체 포인터에 할당합니다. 이 루틴은 어떤 함수가 어떤 객체에서 호출 할 지에 대한 매개 변수를 가지고 있으므로 이벤트에 응답하는 방법을 알고 있습니다.

그래서 동적으로 추가 된 컨트롤을 사용하는 폼을 만들 때 각 컨트롤에 대해 이러한 개체 중 하나를 만들고 폼 내에서 코드를 호출하도록 설정합니다. 폼의 코드는 frmCtrl 개체의 인수 만 사용하므로 어떤 컨트롤이 코드를 실행했는지 쉽게 확인할 수 있으므로 거기에서부터 이동하십시오. 나는 Visio에서 일하므로 모듈과 함수 이름으로 함수를 호출 할 수도 있으므로 클래스도이를 처리 할 수 ​​있습니다. 하지만 Access를 사용하여 전화를 거는 방법을 연구해야합니다.

이 방법은 VBIDE를 통해 컨트롤을 추가 할 때 사용할 수 있지만이 방법을 사용하면이 클래스를 설정하는 데 도움이되지 않을 수도 있습니다. 여기에서 다른 대답을 사용하면됩니다.

관련 문제