ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Excel 매크로 (VBA) - 012. 스핀단추 컨트롤(스피너, Excel Form vs. ActiveX)
    Excel/Excel 매크로 2022. 9. 1. 21:40
    728x90

    전체 목차

     - 001. 특정 행을 복사하여 삽입하기

     - 002. 선택하여 붙여 넣기 기능 정리

     - 003. 변수/Assignment/Loop/비교

     - 004. 데이터가 있는 셀의 범위 알아내기

     - 005. 데이터 시트(쉘) 순회하기

     - 006. 셀 병합 하기

     - 007. 변수에 저장되어 있는 데이터 확인하기 (디버그 기능) 

     - 008. 정렬하기 (Sort)

     - 009. 버튼 컨트롤 (Excel Form vs. ActiveX)

     - 010. 콤보 상자 컨트롤 (Excel Form vs. ActiveX)

     - 011. 확인란/옵션단추 컨트롤(Excel Form vs. ActiveX)

     

    포스트 목차

    01. 컨트롤 삽입

    02. 컨트롤 속성 및 설정 변경

    03. 이벤트 처리

    04. VBA에서 접근하기

    05. 예제

     

    본 포스트에서는 엑셀에서 제공하는 폼 컨트롤(양식 컨트롤)과 ActiveX컨트롤의 스핀단추(스피너)를 엑셀 시트에 삽입해보고 둘의 차이점에 대해서 다루려고 한다.

     

    01. 컨트롤 삽입

    개발도구>삽입>양식 컨트롤>스핀 단추(양식컨트롤) 개발도구>삽입>ActiveX컨트롤>스핀 단추(ActiveX 컨트롤)

    드래그를 이용하여 추가할 수 있으며, 초기이름은 "회전자" + 숫자의 조합, "SpinButton" + 숫자의 조합이다.

     

    02. 컨트롤 속성 및 설정 변경

     

    이 컨트롤은 스핀단추 or 회전자 or 스핀버튼으로 불리고 있으며, 고유의 카운터값을 가지고있다. 위 화살표를 누르면 그 값이 증가하며, 아래 화살표를 누르면 감소한다. 증가/감소의 양(증분)은 미리 정할 수 있으며, 최대값, 최소값 또한 정할 수 있다.

     

    1) 스핀단추(양식컨트롤)

     주요 속성에 대해서만 알아보면 컨트롤 서식(컨트롤 선택 > 우클릭 > 컨트롤 서식)에서 현재값, 최소값, 최대값, 증분, 셀연결(현재값을 특정셀에 표기)를 정할 수 있다.

     

    2) 스핀단추(ActiveX컨트롤)

    주요 속성에 대해서만 알아보면 속성(컨트롤 선택 > 우클릭 > 속성)에서 여러가지 값을 변경할 수 있다.

     - LinkedCell: 연결된 셀

     - Max: 최대값

     - Min: 최소값

     - SmallChange: 증분

     - Value: 현재값

     

    03. 이벤트 처리

     

    버튼이 클릭되었을 때 특수처리를 하고 싶으면 다음과 같이 이벤트 처리루틴을 추가하면 된다.

     

    1) 스핀단추(양식컨트롤)

    디자인모드 > 컨트롤 선택 > 우클릭 > 매크로 지정

    모듈이 추가되며 Sub 프로시저가 생성되는 것을 알 수 있다.

     

    2) 스핀단추(ActiveX컨트롤)

    디자인모드 > 컨트롤 선택 > 우클릭 > 코드 보기

    Sheet 부분에 Sub 프로시저가 추가되는 것을 알 수 있으며, 다음과 같이 클릭 외에 다른 이벤트에 대해서도 이벤트 처리를 추가할 수 있다.

     

     

    SpinUp, SpinDown 처럼 위화살표, 아래화살표에 별개로 이벤트 처리 루틴을 추가할 수 있다.

     

    04. VBA에서 접근하기

     

    VBA 코드 안에서 컨트롤에 저장된 값을 불러오거나, 컨트롤에 저장된 값을 바꿀때는 다음과 같이 접근할 수 있다.

    스핀단추(양식컨트롤) 스핀단추(ActiveX컨트롤)
     [모듈  / Sheet 에 있는 Sub 프로시저 안에서] 
     - 값에 접근
       ActiveSheet.Shapes("이름").ControlFomrat.Value
     - 최대값에 접근
       ActiveSheet.Shapes("이름").ControlFomrat.Max
     - 최소값에 접근
       ActiveSheet.Shapes("이름").ControlFomrat.Min
     - 증분에 접근
       ActiveSheet.Shapes("이름").ControlFomrat.SmallChange

    [Sheet 에 있는 Sub 프로시저 안에서] 
    - 값에 접근 
     이름.Value 
    - 최대값에 접근
     이름.Max
    - 최소값에 접근  
     이름.Min
    - 증분에 접근  
     이름.SmallChange


     [모듈에 있는 Sub 프로시저 안에서] 
    - 값에 접근 
    ActiveSheet.OLEObjects("이름").Object.Value 
    - 최대값에 접근
    ActiveSheet.OLEObjects("이름").Object.Max
    - 최소값에 접근  
    ActiveSheet.OLEObjects("이름").Object.Min
    - 증분에 접근  
    ActiveSheet.OLEObjects("이름").Object.SmallChange


     

    05. 예제

     

    예제의 조건)

     - 셀 A1은 스핀단추(양식컨트롤)과 연결한다.

     - 셀 A2는 스핀단추(ActiveX 컨트롤)과 연결한다.

     - 셀 A3에는 500이라는 숫자를 입력해둔다

     - 셀 A4에는 1000이라는 숫자를 입력해둔다.

     - 스핀단추(양식컨트롤)은 최소값0, 최대값 30000, 증분1로 설정한다.)

     - 스핀단추(ActiveX컨트롤)은 최소값0 최대값200, 증부2로 설정한다.)

     - 스핀단추(ActiveX컨트롤)의 아래방향 화살표가 클릭되면 A4의 값을 1증가시키는 코드를 작성한다.

     - 스핀단추(ActiveX컨트롤)의 위방향 화살표가 클릭되면 A3의 값을 1증가시키는 코드를 작성한다.

     

    예제 해결)

    디자인보기>ActiveX컨트롤 선택>코드보기를 이용하여 Sheet의 Sub 프로시저에 이벤트 처리 루틴을 추가한다.

     

     

    1
    2
    3
    4
    5
    6
    7
    Private Sub SpinButton1_SpinDown()
        ActiveSheet.Cells(31).Value = ActiveSheet.Cells(31).Value + 1
    End Sub
     
    Private Sub SpinButton1_SpinUp()
        ActiveSheet.Cells(41).Value = ActiveSheet.Cells(41).Value + 1
    End Sub
    cs

     

    컨트롤을 누르다보면 아래 그림처럼 컨트롤의 기본값과는 상관없이 A3, A4의 값들이 증가하는 것을 알 수 있다.

     

    728x90
Designed by Tistory.