2009-04-27 5 views
0

이것은 VBA 질문입니다. 질문 : "VBA를 사용하여 Excel userform의 프레임에 컨트롤 추가" 및 내 사용자 폼의 내 프레임에 commandbuttons를 추가하는 방법을 사용했습니다. 네 개의 명령 단추를 추가 했으므로 루프에서 코드를 실행하고 각 명령 단추에 고유 한 이름을 지정하기 위해사용자 코드의 프레임에 동적으로 추가 된 명령 단추에 코드 추가

With ... 
     .Name = "commandbutton" & x 

을 사용했습니다. 각 commandbutton에 대한 코드 매크로를 포함 시켰습니다. (각 Cb의 이름이 무엇인지 알고 있기 때문에 이름을 바꿨으므로) 버튼을 클릭해도 아무 일도 일어나지 않습니다.

다른 방법으로 코드를 사용하여 양식의 컨트롤을 프레임에 배치하는 방법을 설명 할 수 있다면 다른 방법으로 문제를 해결할 수 있습니다.

감사합니다,

마이클

답변

0

이 이벤트 만 VBA 프로그램이 컴파일 될 때 선언 된 객체 변수를 처리하는 것으로 보인다 (즉, 디자인 타임에.) 동적 프로그램에서 개체를 만들 경우 (즉 런타임에) 이미 선언 된 해당 객체 변수에 해당 객체에 대한 참조를 할당해야합니다. 귀하의 예를 당으로

, 당신의 UserForm 관련 모듈에서, 당신은 할 필요가 :

Public WithEvents btn1 As MSForms.CommandButton 
Public WithEvents btn2 As MSForms.CommandButton 
Public WithEvents btn3 As MSForms.CommandButton 
Public WithEvents btn4 As MSForms.CommandButton 

(변수 유형에 MSForms 접두사는 엄격하게 필요하지 않을 수도 있습니다)

다음에 With 문에 컨트롤을 만들면 각 컨트롤을 상당히 혼란스러운 변수 중 하나에 할당해야합니다.

더 나은 솔루션 : 각 버튼의 기능은 실행 시간에 결정 될 경우

  • 단지 디자인 타임에 가능한 버튼의 최대 수를 생성하고 올바른 사람
  • 을 보여주기 위해 Visible 속성을 전환 CommandButton 개체의 일부 속성을 사용하여이 값을 확인한 다음 (예 : Caption 속성, Tag 속성) 해당 단추에 대한 이벤트 처리기를 해당 속성을 기반으로 적절한 함수로 호출하십시오.
  • UI를 변경하고버튼 대신또는 ComboBox
관련 문제