매일 채워가는 꽃바구니
VBA #4. 기본기 및 Language 본문
함수 방식의 기본적인 VBA 코딩을 해보았다.
그리고 이번 글에서는 조금 딱딱한 진행을 할 수밖에 없을 듯하다. 이론적인 부분을 많이 해야하기 때문이다.
1. 개체(Object)
엑셀 상에서 코드를 통해 다룰 수 있는 물건들을 개체라고 한다. 크게 본다면 엑셀에서 확인 할 수 있는 개체는 워크북, 워크시트, 차트, 셀범위 등이 있을 것이다.
개체가 가지고 있을 수 있는 성격을 의미합니다. 예를 들어 셀의 내부색을 빨강으로, 글자의 크기를 13으로, 워크시트의 이름을 Sheet5로, 통합문서의 시트의 개수를 7개로, 등등으로 표현할 수 있다.
3. 방법(Method)
동작에 해당하는 의미의 단어로써. 프로그램을 종료하라. 셀의 내용을 복사하라. 등의 직접적인 명령이 정의되는 것을 의미한다. 이때 해당 개체를 선정해주지 않는다면 무의미한 동작이 될 수 도 있다. (이때의 코드는 에러를 발견할 것이다.)
4. 디버그(Debug)
코드의 에러가 생겼을 때 이를 수정하는 작업을 의미한다. Bug는 오류가 발견된 코드를 지칭하며, 이를 직접 발견(Detecting)해주는 것 또한 VBA의 역할이다. 잘못된 코딩을 했을 경우에는 실행이 되지 않으며 Debug창으로 바로 넘어간다는 것을 알아두자.
5. 변수(variable)와 상수(constant)
변수는 '변할 수 있는 수'를 의미한다. 상수는 '항상 일정하게 정해져있는 수'를 의미한다.
예를 들어 사람의 이름을 입력받아 각각의 사람에게는 일정하게 10만원의 금액을 지급한다고 가정하면,
사람의 이름이 들어갈 문자열 변수를 만들어야 할 것이다.
그리고 10만원이라는 일정한 상수 변수를 하나 만들어야한다.
* 엑셀에 간단한 버튼을 만들어 본인의 이름을 입력받고 그 이름을 차근차근 입력하는 코드를 직접 작성해보자. *
포함된 자료중 Excel 파일을 받고, 실행하신 후
아래 방법중 되는 것을 선택해서 시트1에 있는 [레코드 입력] 버튼이 활성화 되도록 한다.
1. 보안 경고 줄이 있다면 [옵션] 버튼을 눌러서 [이 콘텐츠 사용]을 선택한다.
(이 메뉴가 안보이면 2로 간다.)
2. [개발 도구] 메뉴에서 [매크로 보안] - [ActiveX 설정] - [최소한의 제한 사항으로 모든 컨트롤을 사용하기 전에 확인] - [확인]을 차례로 선택한다.
다시 1번으로 돌아간다.
시트1의 데이터 입력부분에 원하는 데이터를 입력하고 버튼을 누르자.
확인 메세지를 확인하고, 시트 2에 정확히 입력되는지 확인한다.
몇 번정도 더 데이터 편집과 입력을 반복해본다.
소스 분석.
***********************************************************************************
Private Sub CommandButton1_Click()
Dim cnt2 As Integer
Dim msg As String
Dim check As Integer
Dim k As Integer
'cnt2 변수는 시트2에 몇번째 데이터까지 입력되있는지 확인한다.
'msg 변수는 메세지를 저장하는 문자열 변수이다.
'check 변수는 메세지창에서 Yes/No를 저장하는 변수이다.
'k 변수는 시트2에 순번을 나타내는 일련번호 변수이다.
k = Sheets("sheet2").Range("B2").CurrentRegion.Rows.Count
cnt2 = Sheets("sheet2").Range("A2").CurrentRegion.Rows.Count + 2
'k 변수는 시트2의 B2와 연결되어있는 (즉, 데이터가 있는곳) 레코드의 개수를 셈
'cnt2 변수는 A2에서 연결된 레코드의 개수에 2를 더한다. (즉, 빈셀을 찾는다.)
If Range("A3") = "" Or Range("B3") = "" Or Range("C3") = "" Then
msg = MsgBox("데이터 입력란을 확인하세요.", 0, "Mr. Flower")
'입력되는 셀에 비어있는 셀이 있다면 에러를 출력.
Else
msg = Cells(3, 2).Text & "세 " & Cells(3, 1).Text & "님 안녕하세요. 취미가 " & Cells(3, 3).Text & "?? 맞나요??"
check = MsgBox(msg, vbYesNo, "Mr.Flower")
'정보 확인 메세지를 출력하고 선택값을 check 변수에 저장한다.
If check = vbYes Then
MsgBox "확인된 데이터를 입력합니다."
Sheets("Sheet2").Cells(cnt2, 1) = k
Sheets("Sheet2").Cells(cnt2, 2) = Sheets("sheet1").Cells(3, 1)
Sheets("Sheet2").Cells(cnt2, 3) = Sheets("sheet1").Cells(3, 2)
Sheets("Sheet2").Cells(cnt2, 4) = Sheets("sheet1").Cells(3, 3)
Sheets("Sheet2").Cells(cnt2, 5) = "확인됨"
'check 변수의 내용을 확인해서 셀 값을 직접 대입한다.
'다른 구문을 이용하면 보다 더 깔끔하게 정리될 것이다. 조만간의 회차에서 다룸.
Else
MsgBox "확인되지 않은 데이터를 입력합니다."
Sheets("Sheet2").Cells(cnt2, 1) = k
Sheets("Sheet2").Cells(cnt2, 2) = Sheets("sheet1").Cells(3, 1)
Sheets("Sheet2").Cells(cnt2, 3) = Sheets("sheet1").Cells(3, 2)
Sheets("Sheet2").Cells(cnt2, 4) = Sheets("sheet1").Cells(3, 3)
Sheets("sheet2").Cells(cnt2, 5) = "확인되지 않음"
End If
'No가 선택되었을 때 실행되는 부분.
k = k + 1
'k 변수의 값을 증가시키는 부분. 없어도 상관없을 것이다. 지워보자. (필자는 확인하지 않았음.)
End If
End Sub
***********************************************************************************
조금은 복잡하게 코드를 작성했다.
추후에 배울 다른 명령어를 사용하면 좀더 깔끔하고 간략한 데이터를 요약할 수 있을 것이다.
코드를 작성할 때 들여쓰기를 꼭 사용해서 작성하는 연습을 하도록하자.
참고로 버튼의 이름이 commandButton1 으로 설정이 안되어 있다면 이는 실행되지 않는다.
다가오는 회차에서는 좀더 깔끔하게 코드를 작성할 수 있도록 해보자.
'VBA Excel' 카테고리의 다른 글
VBA 이용 같은 문구 병합 (0) | 2009.08.07 |
---|---|
값이 틀린 셋 자동 비교 (0) | 2009.08.06 |
VBA 중복과 비중복 고려하여 누적 Counting 하기 (0) | 2009.07.31 |
VBA 특정 조건에 맞는 셀 표시하기 (0) | 2009.07.31 |
VBA 문자열 조합하기(단순버전) (0) | 2009.07.31 |