나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내

작성자:  

 유대기 (klovern)

추천:  2
파일:     조회:  3607
제목:   vba로 버튼을 만들고 함수를 연결하는 방법이 있나요?
     
  * 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.

 - 엑셀 버전(95,97,2000,xp,2003,2007): 2013

* 아래줄에 질문을 작성하세요 >>

 > 현재 vba로 시트를 생성시에 OLEObject.Add를 통해서 버튼을 추가했는데
   여기에 버튼 추가시에 미리 만들어놓은 모듈을 넣고 싶은데 방법을 모르겠네요 ..

   그냥 양식컨트롤에 버튼으로 눌러서 매크로 지정하는것으로도 할수 있긴한데 .. 매번 페이지가 늘어날때마다 하기가 번거로울꺼 같아서요 ..
 
[불량 게시물 신고]  
조삿갓실제로 의도하시는 것과 완전히 정반대의 해법을 찾고 계신 듯 합니다. 오히려 양식버튼이 훨씬 다루기도 쉽고 자동화가 가능합니다.

=============
양식버튼
=============
VBA에서 자동으로 생성하기
ActiveSheet.Buttons.Add(Left, Top, Width, Height).Select
Selection.OnAction = "연결할프로시저이름"  '프로시저 연결하기
Selection.Characters.Text = "새캡션"  '버튼에 표시할 문자열(캡션) 지정하기
Selection.Name = "단추A"  '버튼의 인스턴스명 바꾸기

물론 위 명령들 중에서 필요한 것만 사용하면 됩니다.
(인스턴스명은 굳이 바꾸지 않아도...)

그러나...
12-31 (18:05)
삭제 ■신고
조삿갓질문자께서 시트를 생성할 때 자동으로 VBA 코드를 이용하여 OLEObject 즉, ActiveX 컨트롤을 사용하시겠다고 했는데, 이 개체는 생성하기도 훨씬 복잡합니다.(뭐 해 보셨으니까 아시겠지요. 지정해야 할 파라메터 갯수도 더 많지요)
게다가, 이 버튼에 생명력을 주려면(프로시저 연결), 양식 버튼처럼 아무 개체에 있는 아무 프로시저든지 임의로 연결이 가능한 것이 아니고
반드시 그 개체가 삽입된 시트 개체모듈에서
CommandButton1_Click()
과 같은 이벤트 핸들러만 가능합니다.
물론 그 핸들러 프로시저 안에서 다른 프로시저를 호출해야 하지요.
따라서, 이것은 VBA코드로 자동화할 수 없습니다.

즉, 질문자께서 원하시는 것처럼 시트를 생성할 때마다 버튼을 만들고 매크로 연결하는 것이 귀찮아서 아예 자동으로 할 생각이라면, 오히려 ActiveX가 아닌 양식 컨트롤의 버튼을 활용하셔야 한다는 것입니다.
12-31 (18:12)
삭제 ■신고
조삿갓한가지... 시트를 추가하는 방법을 빈 시트를 추가하지 않고 기존의 시트(이미 버튼과 해당 이벤트핸들러가 삽입되어 있는)를 복제(Copy)하는 방법으로 추가하면, 기존 시트에 포함되어 있던 버튼과 개체모듈 코드 전체가 그대로 복제됩니다. 이렇게 한다면 양식 버튼이나 ActiveX 버튼이나 별 차이가 없겠지요.12-31 (18:22)
삭제 ■신고
유대기인터넷에서 찾아서 하다보니 .. 정반대의 방법을 사용하고 있었네요 ㅠㅠ 답변 감사드립니다!01-01 (18:13)
삭제 ■신고
        
  

작성일 : 2017-12-31(09:39)
최종수정일 : 2017-12-31(09:39)