프로그래밍 과정에서 작업한 내용이 실제 적용되는 독립된 대상 엑셀 VBA에서 개체는 통합 문서, 셀, 차트, 폼같은 엑셀의 구성요소를 의미 개체와 메서드 또는 개체와 속성은 마침표(.)로 구분해서 차례로 입력
메서드 [Method]
개체를 실행할 수도록 동작 또는 행동을 시키는 것 [특정 개체에서만 실행 가능한 프로시저] 메서드를 설정하려면 '개체명.메서드'와 같은 형식으로 입력
속성 [Property]
크기, 색, 화면 위치와 같은 개체의 특성이나 가능, 불가능과 같은 개체의 상태 속성을 설정하려면 '개체명.속성=값'과 같은 형식으로 입력
이벤트 [Event]
프로그램 사용 중에 일어나는 사건[마우스 클릭, 셀 이동 등]을 의미 이벤트가 일어났을 때 실행되도록 작성된 프로시저를 이벤트 프로시저라고 함 이벤트는 사용자가 마우스나 키보드를 움직이는 동작이나 프로그램의 실행 결과로 인해 발생 캐체에 딸 발생하는 이벤트의 종류가 다름 일반적으로 프로시저는 '개체명_이벤트명'과 같은 형식으로 입력
Workbooks 개체
엑셀 통합 문서를 의미
주요 속성
설 명
Count
통합 문서 개수
Name
통합 문서 이름
Windows
지정한 통합 문서의 모든 창
Worksheets
지정한 통합 문서의 모든 워크시트
Saved
통합 문서 저장 여부
주요 메서드
설명
Add
통합 문서 생성
NewWindow
통합 문서에 새 창을 만듦
Close
통합 문서를 닫음
Open
통합 문서를 염
Save
통합 문서 저장
SaveAs
통합 문서를 다른 이름으로 저장
Worksheets 개체
워크시트를 의미
주요 속성
설 명
Cells
워크시트의 모든 셀
Range
워크시트의 셀이나 셀 범위
Columns
워크시트의 모든 열
Rows
워크시트의 모든 행
EntireColumn
지정된 범위 내의 모든 열
Entirerow
지정된 범위 내의 모든 행
Name
워크시트의 이름
Visible
워크시트의 표시 여부 지정
주요 메서드
설명
Activate
해당 워크시트를 활성화시킴
Add
새로운 워크시트 삽입
Copy
워크시트 복사
Protect
워크시트 보호
Select
워크시트 선택
Range 개체
셀, 행, 열, 연속 셀 블록이 하나 이상들어 있는 셀 선택 영역을 의미
ex> Range("A4") : A4셀
주요 속성
설 명
ActiveCell
현재 셀
Address
참조하는 셀 주소
Cells
지정된 범위의 모든 셀 ex> Cells(4,2) : 4행 2열
Count
지정된 범위의 셀 수
Currentregion
데이터가 있는 인접 영역의 범위 ex> Range("a4").CurrentRegion
End
지정된 범위의 마지막 셀
Next
다음 시트나 셀
Offset
지정된 범위에서 떨어진 범위
Range
셀이나 영역 범위
Value
지정된 셀
상수와 변수
상 수
항상 같은 값을 유지하는 수 사용자 정의 상수와 내부 상수가 있음 내부 상수 : VBA가 미리 제공하는 상수 사용자 정의 상수 : 사용자가 지정하는 상수 [내부 상수와 같은 이름의 사용자 정의 상수 사용 불가]
변 수
상황에 따라 변하는 수 변수 선언은 '키워드 + 변수이름 + As 데이터 유형'으로 이뤄짐
변수 선언 키워드 종류 Private : 모듈의 처음에 선언하며 해당 모듈 내의 모든 프로시저에서 사용 가능 Public : 모듈의 처음에 선언하며 모든 모듈에서 사용 가능 Dim : 선언하는 위치에 따라 사용 범위가 다름 프로시저의 처음에 선언하면 해당 프로시저 내에서만 사용 가능 모듈의 처음에 선언하면 해당 모듈 내의 모든 프로시저에서 사용 가능 Static : 프로시저의 처음에 선언 해당 프로지서 내에서 사용 가능 프로시저 종료 후에도 값이 유지됨
프로시저
특정 기능을 실행할 수 있도록 나열된 명령문의 집합
프로시저들의 집합을 모듈이라고 함 → 프로시저들은 모듈 안에서 구성됨 → 모듈은 프로젝트를 구성하는 기본 단위
사용자가 기록한 매크로도 하나의 프로시저
프로시저 이름 지정 방법[= 변수 이름 지정 방법] 1. 문장 부호나 공백 사용 불가 2. 255자까지 가능 3. 문자, 숫자, 언더바(_) 사용 가능 4. Visual Basic 키워드를 이름으로 지정 불가
프로시저의 구분
프로시저
설명
Sub ~~ End Sub
가장 일반적인 형태로 별과값을 반환하지 않음 작성된 Sub 프로시저는 어크시트에서 매크로처럼 연결하여 사용 가능
Function ~~ End Function
실행된 결과값을 반환할 때 사용 작성된 Function 프로시저는 워크시트에서 일반 내장 함수와 같은 방법으로 사용
Property ~ End Property
개체의 속성을 새로 정의할 때 사용 개체 할당[Property Let()], 개체 읽기[Property Get()], 개체 참조[Property Set()]등이 있음
예제문제
1. 프로시저 작성
[개발도구 → 코드 → Visual Basic]을 선택하거나 Alt +F11을 눌려서 Visual Basic Editor 실행
sheet8을 클릭한 후 cmd입력을 눌려서 '입장료입력.Show'입력
2. 초기화 설정
'입장료입력' 폼에서 빈 곳 더블 클릭
UserForm에서 Initialize를 선택
목록을 표시하기 위해 '개체명.RowSource = "목록에 표시될 데이터 범위"'을 입력 혹은, '개체명.Additem"데이터 입력 내용"'으로 하나씩 지정 ex> Cmbo구분.Additem"동물원" Cmbo구분.Additem"테마가든" Cmbo구분.Additem"패키지"
첫번째 항목이 기본으로 선택되게 하기 위해 '개체명.ListIndex = 0'을 입력
※ 변경된 셀 글꼴 변경
폼이 아닌 해당시트에서 작업!! [해당시트 선택 후, worksheet클릭] → 글 꼴 체 : Target.Font.Name ="변경할 글꼴체명"
→ 글꼴 크기 : Target.Font.Size = 12
→ 굵기 조절 : Target.Font.Bold = True
→ 이텔릭체 : Target.Font.Italic =True
※ 목록을 표시할 때 지정한 열이 모두 보이도록 할 것! → Cmbo구분.ColumnCount = 3
3. 입력 클릭시 데이터 등록
'입장료입력'폼에서 입력 더블 클릭
인원수 값이 0보다 클때만 입력되고 0이하는 '인원수를 입력하시오!'라는 메세지를 출력하시오 → if Text인원수 >0 Then ~~~~ Else MsgBox "인원수를 입력하시오!" End If
데이터를 추가하거나 삭제하여도 항상 마지막 데이터 다음에 입력되게 하시오 → 먼저 표 범위를 알기 위해 b2셀을 선택한 후에 [Ctrl + A]키를 눌림 ※ [B2:G3]범위로 설정되어있음을 확인 가능! → 입력행 = Range("b2").CurrentRegion.Rows.Count + 2 ※ Range("표의 첫셀").CurrentRegion.Rows.Count ※ 이 문제에서는 범위가 2행으로 되어 있으므로 Range("b2").CurrentRegion.Row.Count=2
입장료는 List대상 목록을 이용해 입력하시오 → 리스트 = List대상.ListIndex → Cells(입력행, 3) = List대상.List(리스트, 0) Cells(입력행, 4) = List대상.List(리스트, 1)