VBA
IT위키
더 많은 작업
- Visual Basic for Applications; VBA
- 마이크로소프트 오피스(엑셀·액세스·워드 등) 안에서 작업을 자동화하도록 넣어 둔 BASIC 계열 프로그래밍 언어
VBA 는 Visual Basic 문법을 오피스 프로그램 안에서 쓰도록 만든 매크로 언어다. 엑셀에서 매크로를 기록하면 그 동작이 VBA 코드로 저장되고, Visual Basic Editor(Alt + F11)에서 코드를 직접 쓰거나 고친다. 셀·시트·폼·컨트롤 같은 오피스의 개체(object)를 속성과 메서드로 다루고, 단추 클릭 같은 이벤트가 일어날 때 코드를 실행한다.
Sub 매출합계() ' Sub 프로시저: 값을 돌려주지 않는다
Range("C1").Value = Range("A1").Value + Range("B1").Value
End Sub
Function 부가세(금액) ' Function 프로시저: 값을 돌려준다. 시트에서 =부가세(A1) 처럼 쓸 수 있다
부가세 = 금액 * 0.1
End Function
'뒤는 주석이다- Public 프로시저는 모든 모듈에서, Private 프로시저는 선언된 모듈 안에서만 부를 수 있다
- 변수는
Dim 변수 As 형식으로 선언한다(Dim i As Integer). 선언하지 않고 쓰면 Variant 형이 된다
If 점수 >= 90 Then
등급 = "A"
ElseIf 점수 >= 80 Then
등급 = "B"
Else
등급 = "C"
End If
Select Case 점수
Case Is >= 90: 등급 = "A"
Case 80 To 89: 등급 = "B"
Case Else: 등급 = "C"
End Select
| 형식 | 언제 끝나나 | 조건 검사 |
|---|---|---|
For i = 1 To 10 Step 1 ... Next i |
카운터가 끝값을 넘으면 | - |
For Each 셀 In Range("A1:A10") ... Next |
컬렉션의 모든 요소를 돌면 | - |
Do While 조건 ... Loop |
조건이 참인 동안 반복 | 먼저 검사(한 번도 안 돌 수 있다) |
Do Until 조건 ... Loop |
조건이 참이 될 때까지 반복(거짓인 동안) | 먼저 검사 |
Do ... Loop While 조건 / Loop Until 조건 |
위와 같다 | 나중에 검사(최소 한 번은 실행) |
Sub 예제()
Test = 0
Do Until Test > 10
Test = Test + 1
Loop
Range("A1").Value = Test
End Sub
- Test 가 0, 1, 2, … 10 일 때는
Test > 10이 거짓이라 계속 1 을 더한다 - Test 가 11 이 되는 순간 조건이 참이 되어 반복을 끝내므로 [A1] 에는 11 이 들어간다. 10 에서 멈추지 않는다
Do While Test < 10으로 바꾸면 10 에서 끝난다. 1부터 10까지 더하는 식이었다면 55 다
Range("A1").Value = 10- 셀에 값 넣기.Range("A1:C3")처럼 범위도 된다Cells(2, 3)- 2행 3열, 곧 [C2]ActiveCell,Selection,Worksheets("Sheet1"),ActiveSheetRange("A1").Formula = "=SUM(B1:B10)"- 수식 넣기MsgBox "완료"- 메시지 상자,InputBox("이름?")- 입력 상자
액세스에서는 폼·보고서의 컨트롤 이벤트에 이벤트 프로시저를 붙인다.
Private Sub cmd숨기기_Click()
Me![DateDue].Visible = False
End Sub
- 이벤트 프로시저 이름은
개체이름_이벤트이름이다. 단추를 한 번 누르면 Click, 두 번 누르면 DblClick, 폼이 열릴 때 Load·Open, 값을 고친 뒤 AfterUpdate Me는 코드가 들어 있는 폼(보고서) 자신이다- 느낌표
!는 폼에 들어 있는 컨트롤(필드)을 가리키고, 마침표.는 그 개체의 속성·메서드를 가리킨다. 그래서Me![DateDue].Visible이 맞는 꼴이고Me.[DateDue]!Visible·Me.DateDue!Visible은 속성 자리에 ! 를 쓴 틀린 꼴이다. 컨트롤은Me.DateDue처럼 마침표로도 가리킬 수 있지만, 속성은 반드시 마침표로 잇는다. 이름에 공백이 있으면 대괄호로 감싼다 - Visible 을 False 로 두면 컨트롤이 화면에서 숨겨지고 True 면 보인다. Enabled 는 사용 가능 여부, Locked 는 편집 잠금이다
DoCmd.OpenForm "폼이름",DoCmd.OpenReport,DoCmd.Close처럼 DoCmd 개체로 매크로 함수를 부른다 → 액세스 매크로- 컨트롤의 종류와 속성은 액세스 컨트롤, 폼 구조는 액세스 폼
VBA 는 파일을 지우거나 외부 프로그램을 부를 수 있어 매크로 바이러스로 쓰이기도 한다. 매크로가 든 엑셀 파일은 .xlsm 으로 저장하고, 신뢰할 수 있는 파일만 [콘텐츠 사용] 으로 연다 → 바이러스