EXCEL VBA

엑셀 VBA 버튼으로 값 입력하고, 비활성화 된 버튼 색 바꾸기(버튼 활성화 표시)

카루루1007 2024. 8. 9. 12:54
728x90
반응형

[ 들어가며 ]

 

셀에 값을 입력할 때
직접 입력하는 방법도 있지만,
버튼을 클릭해서 입력을 할 수도 있습니다.

예를 들어,
선택지가 두 개인
예 또는 아니오
판매 또는 구매
신청 또는 미신청
과 같은 경우에는 두 개의 버튼을 만들고
버튼을 통해 입력을 받게 만들면
좀 더 직관적일 수 있습니다.

구현해 볼 기능은
수입 버튼지출 버튼을 두 개 만들고
버튼을 눌렀을 경우
특정 셀에 수입 또는 지출이 입력되게 하는 버튼을 만들겠습니다.

또한 어떤 버튼이 선택되었는지 확인이 용이하도록
선택된 버튼을 강조하는 방법도 알아보겠습니다.

 

[ 버튼 만들기 ]

 

먼저 아래 그림과 같이
버튼을 눌렀을 때 데이터가 입력될 셀을 지정했습니다.

저는 A2셀과 B3셀을 병합하여 하나의 셀로 만들었고
이 경우 해당 셀은 A2셀로 인식이 됩니다.

그다음 D2셀에 버튼을 만들 예정이기 때문에
버튼과 입력될 셀의 거리를 줄이기 위해 C2셀의 너비를 조금 좁게 만들었습니다.

그 다음 [ 삽입 ][ 도형 ] 에서 버튼으로 만들 모양을 선택합니다.
저는 사각형 중 두 번째 위치한 도형을 선택했습니다.

그다음 아래 그림과 같이 도형을 배치했습니다.

그 다음 도형 마우스 우클릭을 하면 아래 그림과 같이 나타납니다.
여기서 [ 텍스트 편집 ]을 누르면 텍스트를 입력할 수 있습니다.

아래 그림과 같이 먼저 도형을 만들고 배치를 해주었습니다.

 

[ 버튼으로 데이터 입력하기 ]

 

반응형

다음 [ 개발도구 ] → [ Visual Basic ]을 눌러 VBA창을 열어줍니다.
그 다음 [ 삽입 ] → [ 모듈 ]을 눌러 모듈을 삽입합니다.

먼저 수입버튼을 눌렀을 때 A2셀에 수입이 입력되고
지출버튼을 눌렀을 때 A2셀에 지출이 입력되게 하는 코드입니다.

Sub 수입버튼클릭()
    Range("A2").Value = "수입"
End Sub

Sub 지출버튼클릭()
    Range("A2").Value = "지출"
End Sub

이렇게 두 개의 코드를 작성하고
버튼에 연결합니다.

도형을 마우스 우클릭하고
매크로 지정을 누르면
연결할 수 있는 매크로가 수입버튼클릭과 지출버튼클릭
두 개 보일 겁니다.

두 개의 도형에 각각 하나씩 연결해 줍니다.

그다음 도형을 클릭하면
A2셀에 값이 입력됩니다.

 

[ 버튼 활성화 비활성화 시키기 ]

 

지금 상태는 아마 아래와 비슷한 상태일 것입니다.

사용자가 버튼만 보고도 어느 것이 입력된 상태인지
알 수 있도록
선택되지 않은 버튼은 비활성화시켜보겠습니다.

저는 색만 바꿀 것이기 때문에
불필요한 윤곽선은 미리 제거하겠습니다.

윤곽선 제거는 디자인을 위한 것이지 꼭 필요한 사항은 아니므로
생략하셔도 됩니다.

이제 색을 변경할 것인데 저는 도형의 색을 변경하는
VBA코드는 모르는 상태이기 때문에
어떻게 변경하는지 매크로 기록을 통해 알아보겠습니다.

매크로 기록을 하고 도형의 색을 바꾸어 보겠습니다.

[ 개발도구 ] → [ 매크로 기록 ]을 눌러줍니다.

그다음 도형의 색을 원하는 색으로 한 번씩 바꿔줍니다.
이제 기록중지 를 누르고 입력된 코드를 살펴보면

Sub 매크로1()
    ActiveSheet.Shapes.Range(Array("Rounded Rectangle 8")).Select
    With Selection.ShapeRange.Fill
        .Visible = msoTrue
        .ForeColor.ObjectThemeColor = msoThemeColorAccent1
        .ForeColor.TintAndShade = 0
        .ForeColor.Brightness = 0
        .Transparency = 0
        .Solid
    End With

    ActiveSheet.Shapes.Range(Array("Rounded Rectangle 9")).Select
    With Selection.ShapeRange.Fill
        .Visible = msoTrue
        .ForeColor.ObjectThemeColor = msoThemeColorBackground2
        .ForeColor.TintAndShade = 0
        .ForeColor.Brightness = 0
        .Transparency = 0
        .Solid
    End With
    Range("F3").Select
End Sub

이와 유사하게 되어 있을 겁니다.
먼가 복잡한데 중요한 부분은 다음입니다.

Brightness 부분은 같을 수도 있고 다를 수도 있을 겁니다.
색은 잘 모르지만 밝기가 비슷한 색을 선택했다면
저 수치는 같게 나올 겁니다.

대략 살펴보면 위 코드는 Selection을 통해 도형을 선택하고
색과 밝기 등을 바꾸는 코드로 보입니다.

728x90

 

우선 이 코드는 선택을 한 후 바꾸는 것이지만,
저희는 클릭을 해서 바꿀 것이기 때문에
도형에 이름을 지정해 줍니다.

도형에 이름을 지정하는 방법은 다음과 같습니다.

엑셀 시트로 넘어와 도형을 편집가능한 상태로 만들면
좌측 상단의 이름 상자에서
도형의 이름을 편집할 수 있습니다.

저는 각각 수입버튼지출버튼으로 이름을 설정하겠습니다.

그다음 처음에 값을 입력할 때 만들었던
수입버튼클릭() 함수지출버튼클릭(함수)에 다음과 같이 코드를 작성합니다.

Sub 수입버튼클릭()
    Range("A2").Value = "수입"
    ActiveSheet.Shapes("수입버튼").Fill.ForeColor.ObjectThemeColor = msoThemeColorAccent1
    ActiveSheet.Shapes("지출버튼").Fill.ForeColor.ObjectThemeColor = msoThemeColorBackground2
End Sub

Sub 지출버튼클릭()
    Range("A2").Value = "지출"
    ActiveSheet.Shapes("지출버튼").Fill.ForeColor.ObjectThemeColor = msoThemeColorAccent1
    ActiveSheet.Shapes("수입버튼").Fill.ForeColor.ObjectThemeColor = msoThemeColorBackground2
End Sub

밝기도 다르게 나오셨던 분들은 밝기 부분도 같이 넣으시면 됩니다.

ActiveSheet.Shapes("지출버튼").Fill

이 부분은 활성화된 시트의 지출버튼 이름을 가진 도형을 채워라.
라는 의미이며
그 뒷부분은 어떻게 채울지 정해주는 것입니다.

매크로 기록에서 보였던 코드를 그대로 복사했으며,
두 개의 버튼에서 각각 어떤 버튼을 클릭했을 때
자신의 색과 다른 버튼의 색이 변하게 만든 것입니다.

이렇게 하면 완성이 되었습니다.

수입버튼을 누르면 수입버튼은 색이 눈에 띄고
지출버튼은 회색 계열로 바뀝니다.

그 반대도 마찬가지가 됩니다.

글로 작성하니 내용이 길어졌지만,
막상 익숙해지시면 몇 분 걸리지 않는 작업입니다.

 

여기를 방문하시면 더 많은 엑셀 관련 자료를 확인할 수 있습니다.

엑셀 공부하기
VBA 공부하기

728x90
반응형