비주얼 베이직 포 애플리케이션
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
비주얼 베이직 포 애플리케이션(VBA)은 1993년 마이크로소프트가 Visual Basic을 기반으로 개발하여 엑셀 5.0에 처음 탑재된 프로그래밍 언어이다. VBA는 오피스 응용 프로그램의 기능을 확장하고 자동화하는 데 사용되며, 엑셀, 워드, 액세스, 파워포인트 등 다양한 마이크로소프트 오피스 제품군에서 활용된다. VBA는 64비트 환경을 지원하며, Office 2010 이후 버전에도 포함되어 있다. VBA는 OLE 자동화를 사용하여 호스트 애플리케이션과 상호 작용하며, 매크로, 사용자 정의 함수, 사용자 인터페이스 등을 제공한다. VBA는 업무 자동화, 데이터 분석, 보고서 작성, 사용자 지정 솔루션 개발 등 다양한 분야에서 활용되며, 관련 자격증 시험도 존재한다. VBA는 보안 문제와 관련하여 매크로가 악의적인 목적으로 사용될 수 있으며, 마이크로소프트는 VBA 매크로를 차단하는 등 보안을 강화하고 있다.
더 읽어볼만한 페이지
- 베이직 예제 코드가 있는 문서 - 비주얼 베이직 닷넷
비주얼 베이직 닷넷(VB.NET)은 마이크로소프트의 .NET 프레임워크에서 실행되는 프로그래밍 언어이며, 2002년 첫 출시 이후 지속적으로 발전해 왔고, C#과 유사하지만 VB6과의 호환성은 낮다. - 매크로 프로그래밍 언어 - TeX
TeX는 도널드 커누스가 개발한 수학, 과학, 공학 분야의 고품질 문서 출력을 위한 조판 시스템이며, 수학 수식 조판에 특화된 매크로 시스템과 높은 확장성을 제공한다. - 매크로 프로그래밍 언어 - M4 (프로그래밍 언어)
M4는 1977년 데니스 리치와 브라이언 커니건이 개발한 매크로 프로세싱 프로그래밍 언어이며, 텍스트 재사용, 파일 포함, 문자열 조작 등 다양한 기능을 제공하고 튜링 완전성을 갖춘 언어이다.
비주얼 베이직 포 애플리케이션 - [IT 관련 정보]에 관한 문서 | |
---|---|
기본 정보 | |
이름 | 비주얼 베이직 포 애플리케이션 |
원어명 | Visual Basic for Applications |
약칭 | VBA |
개발사 | 마이크로소프트 |
최초 출시 | 1993년 |
최신 버전 | 7.1 (Office 2021) |
기술 정보 | |
프로그래밍 패러다임 | 다중 패러다임 |
자료형 체계 | 동적/정적 혼합, 강한/약한 혼합 |
영향 받은 언어 | QuickBASIC, Microsoft Visual Basic |
운영체제 | Microsoft Windows, macOS |
라이선스 | 프로프리에터리 EULA |
언어 분류 | |
분류 | 객체 지향 언어, 명령형 언어 |
2. 역사
VBA는 1970년대와 1980년대 개인용 컴퓨터가 처음 출시되었을 때부터 BASIC을 포함했던 마이크로소프트의 전통을 잇는 기술이다. 1989년 빌 게이츠는 BASIC을 마이크로컴퓨터에서 다양한 소프트웨어의 성능을 향상시키거나 변경하는 데 사용할 보편적인 언어로 만들겠다는 계획을 밝혔다.[5] 당시 BASIC 프로그래머는 400만 명에 달했고, 이는 PC에서 다른 어떤 언어보다 3배 더 자주 사용되는 수치였다.
1991년 Visual Basic이 출시되면서, 이를 윈도우 애플리케이션을 위한 보편적인 프로그래밍 언어로 사용하는 것이 자연스러운 흐름이 되었다. VBA는 1993년 마이크로소프트가 엑셀 5.0에 처음 탑재하면서 세상에 나왔다.[5] VBA는 P 코드 기반의 컴파일러형 및 인터프리터형 성질을 모두 가지고 있어,[20] 사용자가 작성한 소스 코드를 한 번에 의사 코드로 컴파일하여 실행할 수 있다.
2. 1. 초기 역사 (1993년 ~ 1997년)
1993년, 마이크로소프트는 엑셀 5.0에 VBA를 처음 탑재하여 출시하였고, 이는 기업 솔루션을 만드는 개발자들 사이에서 큰 성공을 거두었다.[5] 이후, Microsoft Project, 액세스, 워드 등 다른 오피스 제품군에도 VBA를 탑재하여 그 활용 범위를 넓혔다. 이를 통해, VBA는 기존의 액세스 BASIC과 WordBASIC을 대체하며 더욱 널리 사용되었다.1996년에는 VBA 4.0이 출시되었는데, 이는 이전 버전에 비해 크게 업그레이드된 버전이었다. VBA 4.0은 C++로 작성되었으며, 객체 지향 프로그래밍을 지원하는 형태로 발전하였다.
1997년에는 오피스 97 제품군과 함께 VBA 5.0이 출시되었다. 다만, Outlook 97은 VBScript를 사용하였다.
2. 2. 발전 (1999년 ~ 2007년)
1999년 오피스 2000과 함께 VBA 6.0 및 6.1이 출시되어 COM 추가 기능을 지원했다.[4] VBA 6.2는 오피스 2000 SR-1과 함께 출시되었다.[4] 이후 VBA 6.3은 오피스 XP, VBA 6.4는 오피스 2003,[5] VBA 6.5는 오피스 2007과 함께 출시되었다.[5]2. 3. 최근 동향 (2010년 ~ 현재)
오피스 2010에는 VBA 7.0이 포함되어 있으며, 64비트 지원이 추가되었다. VBA 6.5와 비교했을 때 개발자를 위한 새로운 기능은 추가되지 않았다. 그러나 VBA 6.5/오피스 2007 이후, 마이크로소프트는 다른 응용 프로그램에 대한 VBA 라이선스를 중단했다.[9]오피스 2013, 오피스 2016, 오피스 2019 및 오피스 2021에는 VBA 7.1이 포함되어 있다.
2007년 7월 1일 기준으로 마이크로소프트는 신규 고객에게 VBA 배포 라이선스를 제공하지 않고 있다. 마이크로소프트는 .NET Framework 출시 이후 VBA에 .NET 기반 언어를 추가하려고 했다.[9] .NET Framework 버전 1.0 및 1.1에는 ''Script for the .NET Framework''라는 스크립팅 런타임 기술이 포함되었다.[10] Visual Studio .NET 2002 및 2003 SDK에는 VB.NET을 지원하는 ''Visual Studio for Applications''(VSA)라는 별도의 스크립팅 IDE가 포함되어 있었다.[11][12][13] 이 기술의 주요 기능 중 하나는 Active Scripting(VBScript 및 JScript)을 통해 인터페이스를 사용할 수 있다는 점으로, .NET을 인식하지 못하는 애플리케이션도 .NET 언어를 통해 스크립트를 작성할 수 있었다. 그러나 VSA는 .NET Framework 버전 2.0에서 더 이상 사용되지 않았으며,[13] Active Scripting 지원을 원하는 애플리케이션에 대한 명확한 업그레이드 경로는 제공되지 않았다.
마이크로소프트는 Microsoft Office 2008 for Mac에서 VBA 지원을 중단했다.[14][15] VBA는 Microsoft Office for Mac 2011에서 다시 지원되었다. 마이크로소프트는 윈도우 버전의 Office에서 VBA를 제거할 계획이 없다고 밝혔다.[16][17]
오피스 2010에서 마이크로소프트는 실제 포인터 데이터 형식인 LongPtr를 포함하는 VBA7을 도입하여 64비트 주소 공간을 참조할 수 있게 되었다. Office 2010의 64비트 설치는 MSComCtl 또는 MSComCt2의 일반적인 컨트롤을 지원하지 않으므로, 이러한 컨트롤에 의존하는 레거시 32비트 코드는 64비트 VBA 코드로 포팅해도 작동하지 않는다. 이는 32비트 버전 Office 2010에는 영향을 미치지 않았다.[18] 마이크로소프트는 결국 2017년 7월 27일 Office 2016 업데이트와 함께 64비트 버전의 MSComCtl을 출시했다.[19]
3. 디자인
VBA로 작성된 코드는 P-코드 (포장된 코드)로 불리는 독자적인 중간 언어로 컴파일되고[33], 호스팅 응용 프로그램(액세스, 엑셀, 워드, 파워포인트)은 문서 스트림의 독립적인 COM 구조적 저장소 파일(예: .doc
또는 .xls
)에 분리된 스트림에 저장한다. 중간 코드는 가상 머신 (호스팅 응용 프로그램에 의해 호스팅됨)에 의해 실행된다[33]. VBA는 마이크로소프트 비주얼 베이직을 제외한 어떤 것과도 호환되지 않으며, VBA 모듈 및 클래스의 소스 코드를 직접 가져올 수 있고, 동일한 라이브러리 및 가상 머신을 공유한다. 호환성은 비주얼 베이직 버전 6에서 종료된다. VBA는 VB.NET과 호환되지 않는다. VBA는 마이크로소프트의 독점 기술이며, COM 인터페이스를 제외하고는 공개 표준이 아니다.
4. 기능 및 용도
VBA는 오피스 응용 프로그램의 기능을 사용자의 필요에 맞게 확장하고 자동화하는 데 사용된다. 엑세스, 워드, 엑셀 등 응용 프로그램에서 VBA를 사용하려면 해당 응용 프로그램과의 상호작용이 필요하다.[34][35] VBA는 각 응용 프로그램의 ''개체 모델''을 통해 이러한 상호작용을 처리한다. 개체 모델은 각 응용 프로그램 제작자가 정의하며, 사용자는 VBA 편집기의 "개체 브라우저"(F2)를 통해 확인할 수 있다.
VBA 사용의 어려움은 주로 개체 모델 학습과 관련되어 있다. 개체 모델은 제작자가 만든 이름을 사용하기 때문에 처음 사용하는 사람에게는 다소 어려울 수 있다. 개체 모델의 용어와 구문을 배우는 한 가지 방법은 ''매크로 기록기''를 사용하는 것이다.[36] 매크로 기록기는 사용자가 응용 프로그램에서 수행하는 작업을 기록하여 VBA 코드로 변환해준다. 생성된 코드는 VBA 편집기에서 확인하고 수정할 수 있다. 그러나 매크로 기록기는 모든 것을 기록하지는 않으며, 일부 응용 프로그램에서는 제공되지 않을 수도 있다.
VBA는 OLE 자동화를 사용하여 호스트 애플리케이션과 상호 작용한다. 호스트 애플리케이션은 일반적으로 형식 라이브러리와 응용 프로그래밍 인터페이스(API) 문서를 제공하며, VBA 개발 환경 내에서 개체 브라우저를 사용하여 확인할 수 있다.
VBA 프로그램은 메뉴 버튼, 매크로, 키보드 단축키 또는 문서 열기와 같은 OLE/COM 이벤트에 연결할 수 있다. 또한, ActiveX 컨트롤을 호스팅할 수 있는 UserForms 형태의 사용자 인터페이스를 제공한다.
프로세스 간 통신 자동화에는 동적 데이터 교환(DDE) 및 실시간 데이터(RTD)가 포함되며, 이를 통해 동적 또는 실시간 금융/과학 데이터를 위해 COM 자동화 서버를 호출할 수 있다.[7]
1990년대 마이크로소프트가 개발한 범용 프로그래밍 언어인 Visual Basic을 오피스 제품군에 탑재한 것이 VBA이다. VBA를 통해 엑셀, 액세스, 워드, 아웃룩, 파워포인트 등 오피스 애플리케이션의 기능을 확장하거나 맞춤 설정할 수 있다.
마이크로소프트 오피스 제품군에는 VBA 소스 코드 작성 및 편집 도구와 프로그램 실행 환경이 기본적으로 포함되어 있어, 추가적인 소프트웨어 설치나 설정 없이 바로 사용할 수 있다. 관련 자료가 풍부하여 쉽게 학습하고 프로그래밍을 시작할 수 있다. 또한, VBA는 의사 코드(P 코드) 기반 컴파일러형 및 인터프리터형 언어의 특징을 모두 가지고 있어[20], 작성한 소스 코드를 한 번의 동작으로 자동으로 의사 코드로 컴파일하여 실행할 수 있다.
4. 1. 주요 기능
VBA는 반복적인 업무를 자동화하여 효율성을 높인다. 예를 들어, 매일 갱신되는 데이터를 자동으로 읽어와 처리할 수 있다.[34][35] 또한, 사용자가 직접 함수를 만들어 엑셀 등에서 사용할 수 있는데, 헤론의 공식을 사용하는 함수를 만드는 것이 그 예시이다.VBA를 통해 사용자는 자신만의 기능과 서브루틴을 추가할 수 있다. 아래 그림에서 함수 'sq'는 엑셀과 함께 제공되는 비주얼 베이직 편집기에서 생성되었으며, 'x'와 'y'는 스프레드시트의 변수 이름이다.
마이크로소프트 엑셀에서 서브루틴은 스프레드시트에 직접 값을 쓰거나 텍스트를 쓸 수 있다. 그림의 비주얼 베이직 코드는 ''x''-열 (명명된 열 변수 ''x'')의 각 구성원을 읽고, 이것의 제곱을 계산하여 해당 ''y''-열 (또한 명명된 열 변수)에 이 값을 기록한다.
VBA를 사용하면, 스프레드시트에서 ''명명된 변수''를 사용하는 것이 더 쉬워진다. ''y = x 2''에 대한 수식은 포트란 또는 베이직과 유사하며, ''이름 관리자''는 열 변수 ''x''와 ''y''의 정의를 보여준다.
VBA는 사용자 인터페이스를 위한 폼을 만들어 데이터 입력 및 처리를 편리하게 한다. Internet Explorer와 같은 다른 소프트웨어를 제어하거나, 폴더 생성 및 파일 이름 변경 등 운영체제 수준의 작업도 수행할 수 있다.
4. 2. 활용 분야
VBA는 표준 사용자 인터페이스에서 제공하지 않는 기능을 추가할 때 유용하다. 예를 들어, 엑셀에서 '명명된 변수'를 사용하면 ''y = x 2''와 같은 수식을 쉽게 작성할 수 있다. 엑셀의 ''이름 관리자''를 통해 열 변수 ''x''와 ''y''를 정의할 수 있다.[34]VBA를 사용하면 사용자 정의 함수와 서브루틴을 추가할 수 있다. 예를 들어 엑셀의 ''비주얼 베이직'' 편집기에서 ''sq'' 함수를 만들어 ''x'', ''y'' 변수를 참조하게 할 수 있다.
VBA의 주요 활용 분야는 다음과 같다.
- 정형 업무 자동화: 매일 반복되는 데이터 입력, 계산 등의 작업을 자동화하여 시간과 노력을 절약한다. 엑셀 매크로의 기록/재생 기능을 활용하면 VBA 코드 자동 생성을 통해 프로그래밍 지식이 없는 사용자도 업무 자동화를 할 수 있다.[36]
- 특정 목적 최적화: 특정 회사 고유의 급여 체계에 맞춰 직원 급여를 자동 계산하는 등, 특수한 목적에 맞는 함수(사용자 정의 함수)를 만들 수 있다. 사용자 지정 폼을 제작하거나 다양한 플러그인을 통합하는 것도 가능하다.
- 오피스 외 소프트웨어 제어: Internet Explorer 등 오피스 외 다른 소프트웨어를 제어하거나, 폴더 생성, 파일 이름 변경 등 OS 상의 작업도 수행할 수 있다.
- 다른 애플리케이션 통합: 마이크로소프트에서 라이선스를 받아 다른 애플리케이션에 VBA를 통합할 수 있다. Visio, AutoCAD, MicroStation 등 CAD 소프트웨어에도 탑재되어 있다.
VBA 관련 자격증으로는 VBA 엑스퍼트, Microsoft Office Specialist 등이 있다. 이 시험들은 주식회사 오디세이 커뮤니케이션즈가 실시하는 민간 자격 시험으로, 전국의 컴퓨터 학원 등에서 수시로 응시 가능하다. 응시료는 10000JPY 정도이다.
일본 국가 시험인 기본 정보 기술자 시험의 표 계산 소프트웨어 문제에도 VBA와 유사한 의사 언어를 이용한 매크로 정의가 출제된다.
5. 자동화
OLE 자동화를 통해 호스트 애플리케이션과 상호 작용한다. 일반적으로 호스트 애플리케이션은 VBA 프로그램이 애플리케이션과 상호 작용하는 방법을 설명하는 형식 라이브러리와 응용 프로그래밍 인터페이스(API) 문서를 제공한다. 이 문서는 VBA 개발 환경 내의 '개체 브라우저'를 사용하여 확인할 수 있다.[33]
한 애플리케이션의 OLE 자동화 인터페이스를 사용하여 작성된 VBA 프로그램은 OLE 자동화 인터페이스가 다를 수 있기 때문에, 해당 애플리케이션이 비주얼 베이직 런타임을 호스팅한다고 해도 다른 애플리케이션을 자동화하는 데 사용할 수 없다. 예를 들어, 마이크로소프트 워드를 자동화하여 작성한 VBA 프로그램은 해당 워드 프로세서가 VBA를 호스팅하는 경우에도 다른 워드 프로세서와 함께 사용할 수 없다.[33]
반대로, 여러 애플리케이션은 VBA 코드 내에서 애플리케이션 개체를 생성하여 하나의 호스트에서 자동화할 수 있다. 다른 라이브러리에 대한 참조는 메서드, 개체 등이 애플리케이션에서 사용 가능하도록 VBA 클라이언트 내에서 생성되어야 한다. 이러한 애플리케이션 개체는 처음 생성될 때 애플리케이션에 대한 OLE 연결을 생성한다. 다른 애플리케이션에 대한 명령은 올바르게 작동하려면 이러한 애플리케이션 개체를 통해 명시적으로 수행해야 한다.[33]
예를 들어, 마이크로소프트 엑세스에서 사용자는 자동으로 액세스 라이브러리에 액세스할 수 있다. 마이크로소프트 엑셀, 마이크로소프트 워드, 마이크로소프트 아웃룩 라이브러리에 대한 참조도 생성할 수 있다. 이를 통해 액세스에서 쿼리를 실행하고, 엑셀로 결과를 내보내고, 텍스트를 형식화하여 워드에서 편지 병합 문서를 작성하고, 아웃룩을 통해 자동으로 원본 쿼리의 각 구성원에게 이메일을 보내는 애플리케이션을 만들 수 있다. (이 예제에서 마이크로소프트 아웃룩은 강제된 5초 기다림에 대한 자동화된 프로세스를 통해 사용자가 전송되는 전자 우편을 거부, 허용 또는 취소를 강제하는 보안 기능을 포함한다.)[33]
6. 코드 예제
다음은 워드에서 현재 날짜를 입력하기 위한 단축키를 제공하는 매크로이다.
Sub EnterCurrentDate()
Selection.InsertDateTime DateTimeFormat:="dd-MM-yy", InsertAsField:=False, _
DateLanguage:=wdEnglishAUS, CalendarType:=wdCalendarWestern, _
InsertAsFullWidth:=False
End Sub
VBA는 테이블 측량과 같은 데이터베이스 작업을 자동화하는 데 유용하다.
Sub LoopTableExample
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("select columnA, columnB from tableA")
Do Until rs.EOF
MsgBox rs!columnA & " " & rs!columnB
rs.MoveNext
Loop
rs.Close
Set db = Nothing
End Sub
VBA는 스프레드시트의 행에서 반복되는 작업들을 자동화하는 데 유용하다. 다음은 내장 반복 해결사 ''GOAL SEEK''를 사용하여 수동 메뉴 항목의 반복된 사용을 피하고, 자동으로 열 배열에서 각 행으로 적용하는 코드 예제이다.
Option Explicit
Sub SetTarget()
'
' SetTarget 매크로
'
Dim J As Integer
Dim Size As Integer
'
' 스프레드시트에서, 배열 "C_M"은 명명된 열 변수이고
' 그 구성원은 J로 설정한 행 인덱스를 사용한다
' 내장 함수 COUNT는 배열 "C_M"의 크기를 결정한다
'
Size = Range("C_M").Cells.Count
'
' 배열의 모든 구성원의 초기 값을 설정한다
' C_M부터 1E-06; J = 행 인덱스
'
For J = 1 To Size
Range("C_M").Cells(J) = 0.000001
Next J
'
' "Target"은 차원 "Size"의 스프레드시트에서
' 또다른 명명된 배열이다; 배열 "C_M"처럼 같은 크기이다
'
' 각 행은 각 "Target"은 항목에 따라 달라진다
' 해당 행에서 "C_M"의 값에 따른 지정된 방법은,
' 예를 들어, 이와 같은 함수에 의한 것이다: Target = C_M*C_M
'
' GOAL SEEK는 엑셀에서 내장 반복 해결사이다
'
' 각 "Target" 구성원을 연합하도록 설정하려고 GOAL SEEK를 호출한다: 예를 들어,
' J = 행 인덱스를 취하여, 행 J에서 셀 "C_M"은
' 행 J에서 "Target"은 하나일 때까지 GOAL SEEK에 의해 변경된다
'
' 구문 ("for-next" 세부사항과는 별도이다)은 매크로 녹음기와 함께 발견된다;
' 밑줄 "_"은 줄 연속이다
'
For J = 1 To Size
Range("Target").Cells(J).GoalSeek Goal := 1, _
ChangingCell := Range("C_M").Cells(J)
Next J
End Sub
다음 예제는 셀 범위에서 ''배열''을 얻고, ''배열''을 조작하고, 다른 범위에서 다시 값을 설정하는 데 사용된다. 이는 직접 셀 값 하나하나를 설정하는 것보다 몇 배나 빠르게 작동한다.
Sub CalculateSquares(rinput As Range, routput As Range)
'변수 구체사항들
Dim values() As Variant
Dim i As Integer, N As Integer
'계산하는 행들을 센다
N = rinput.Rows.Count
'입력 범위로부터 배열한 값들을 설정한다
'배열의 예상 형태는 (1 to N, 1 to 1)이다
values = rinput.Value
'행들 및 설정 값들을 반복한다
For i = 1 To N
values(i, 1) = values(i, 1) ^ 2
Next i
'내보내기는 출력 범위의 값 속성을 설정하여
'스프레드시트로 다시 평가한다.
routput.Value = values
End Sub
VBA는 마이크로소프트 엑셀 통합 문서에서 사용하기 위해 사용자 정의 함수 (UDF)를 작성하는 데 사용할 수 있다.
Public Function BusinessDayPrior(dt As Date) As Date
Select Case Weekday(dt, vbMonday)
Case 1
BusinessDayPrior = dt - 3 '월요일은 금요일이 된다
Case 7
BusinessDayPrior = dt - 2 '일요일은 금요일이 된다
Case Else
BusinessDayPrior = dt - 1 '모든 다른 날짜는 이전 날짜가 된다
End Select
End Function
다음은 외부 응용 프로그램 개체 (사용자는 이전에 응용 프로그램에서 참조하는 응용 프로그램의 라이브러리가 있어야 한다)를 추가하는 방법의 예제이다.
Public Sub Example()
Dim XLApp As Excel.Application
Dim WDApp As Word.Application
Set XLApp = CreateObject("Excel.Application")
Set WDApp = CreateObject("Word.Application")
' ...너의 코드가 여기있다...
XLApp.Quit
WDApp.Quit
Set XLApp = Nothing
Set WDApp = Nothing
End Sub
다음은 Excel에서 "Alpha"라는 워크시트를 삭제하는 VBA 예시이다.
```vb
Application.DisplayAlerts = False
Worksheets("Alpha").Delete
Application.DisplayAlerts = True
```
다음 코드는 Excel에서 셀 A1부터 I9까지의 범위에 구구단 표를 만든다.
```vb
For i = 1 To 9
For j = 1 To 9
Cells(i, j).Value = i * j
Next
Next
```
다음은 배열을 사용하여 모든 값을 배열에 저장한 다음 한 번에 출력하여 더 빠르게 작동하도록 수정한 코드이다.
```vb
Dim KukuArray(8, 8) As Integer
For i = 1 To 9
For j = 1 To 9
KukuArray(i - 1, j - 1) = i * j
Next
Next
Range("A1:I9").Value = KukuArray
```
다음 코드는 조건에 따라 4가지 이상의 색상으로 셀을 칠하는 예시이다. (3가지 이하의 색상일 때는 일반 기능인 "조건부 서식"을 사용하는 것이 좋다). 셀 B2부터 E15까지의 범위 내 셀을 5 이하 → 하늘색, 6 이상 10 이하 → 밝은 녹색, 11 이상 15 이하 → 노란색, 16 이상 → 빨간색으로 칠한다.
```vb
Dim myCell As Range
For Each myCell In Range("B2:E15")
Select Case myCell.Value
Case Is <= 5
myCell.Interior.Color = RGB(0, 255, 255)
Case 6 To 10
myCell.Interior.Color = RGB(0, 255, 0)
Case 11 To 15
myCell.Interior.Color = RGB(255, 255, 0)
Case Is > 15
myCell.Interior.Color = RGB(255, 0, 0)
End Select
Next
```
다음은 VBA와 함께 Excel을 종료하는 VBA 예시이다.
```vb
Application.Quit
```
VBA를 사용하여 사용자가 새로운 함수를 만들 수도 있다. 사용자 정의 함수를 작성하려면 Function 프로시저를 사용한다. 다음은 헤론의 공식을 사용하는 사용자 정의 함수 코드이다.
```vb
Function HERON(변1, 변2, 변3) As Variant
s = (변1 + 변2 + 변3) / 2
HERON = Sqr(s * (s - 변1) * (s - 변2) * (s - 변3))
End Function
7. 보안 문제
VBA 매크로는 악의적인 목적으로 사용될 수 있다. VBA를 사용하면 대부분의 보안 기능은 관리자가 아닌 사용자에게 달려 있다. VBA 호스트 응용 프로그램 옵션은 사용자가 접근할 수 있다. VBA 매크로가 포함된 문서를 실행하는 사용자는 웹 브라우저와 마찬가지로 소프트웨어를 사용자 환경 설정에 따라 미리 설정할 수 있다. 최종 사용자는 응용 프로그램에서 매크로 실행을 비활성화하거나, 문서의 출처를 신뢰할 수 있는 경우에만 VBA 코드를 실행하도록 권한을 부여하여 공격으로부터 스스로를 보호할 수 있다.[8]
Office 2000 SP3 이후 보안이 강화되어 초기 설정에서는 VBA 매크로가 비활성화되어 있다.[31] 따라서 매크로가 포함된 파일을 열기만 해서는 프로그램이 실행되지 않지만, 보안 수준을 낮추도록 설정을 변경할 수도 있다.[32] 또한, Office 2007 이후에 일반화된 새로운 파일 형식(.xlsx 등)은 매크로를 포함할 수 없으므로 안전성이 더욱 높아졌다.
2022년 2월, 마이크로소프트는 다양한 Office 앱에서 인터넷에서 다운로드한 파일의 VBA 매크로를 기본적으로 차단하여 맬웨어 확산을 방지할 계획이라고 발표했다.[8]
참조
[1]
웹사이트
Compatibility Between the 32-bit and 64-bit Versions of Office 2010
https://msdn.microso[...]
[2]
웹사이트
What's new for VBA in Office 2019
https://docs.microso[...]
2022-05-02
[3]
웹사이트
Support for VBA Macros
https://help.libreof[...]
The Document Foundation - LibreOffice
2023-01-03
[4]
웹사이트
2016 SolidWorks Help – VBA
http://help.solidwor[...]
2016-07-25
[5]
서적
Learn BASIC Now
Microsoft Press
1989
[6]
웹사이트
ACC: Visual/Access Basic Is Both a Compiler and an Interpreter
http://support.micro[...]
Microsoft
2012
[7]
웹사이트
How to set up and use the RTD function in Excel
https://support.micr[...]
[8]
웹사이트
Microsoft to Block Office VBA Macros by Default
https://www.theverge[...]
2022-09-26
[9]
웹사이트
Visual Studio for Applications
http://blogs.thinkte[...]
[10]
웹사이트
Introducing Visual Studio for Applications
http://msdn.microsof[...]
[11]
웹사이트
Script Happens .NET
http://msdn.microsof[...]
[12]
웹사이트
Microsoft Takes Wraps Off VSA Development Technology
http://redmondmag.co[...]
[13]
웹사이트
VSA scripting in .NET
http://www.codeproje[...]
[14]
웹사이트
WWDC: Microsoft updates Universal status of Mac apps
http://www.macworld.[...]
2007-05-25
[15]
웹사이트
What is Microsoft Office and Office 365 – FAQs
https://products.off[...]
[16]
웹사이트
The Reports of VBA's Demise Have Been Greatly Exaggerated
https://blogs.msdn.m[...]
[17]
웹사이트
Clarification on VBA Support
http://blogs.msdn.co[...]
[18]
웹사이트
Compatibility Between the 32-bit and 64-bit Versions of Office 2010
http://msdn.microsof[...]
[19]
웹사이트
Release notes for Monthly Channel releases in 2017
https://learn.micros[...]
2022-11-13
[20]
Internet Archive
ACC2000: Visual Basic for Applications Is Both a Compiler and an Interpreter
https://web.archive.[...]
[21]
웹사이트
Visual Studio for Applications
http://blogs.thinkte[...]
2007-12-17
[22]
웹사이트
Introducing Visual Studio for Applications
http://msdn.microsof[...]
2007-12-17
[23]
웹사이트
Script Happens .NET
http://msdn.microsof[...]
2007-12-17
[24]
웹사이트
Microsoft Takes Wraps Off VSA Development Technology
http://redmondmag.co[...]
2007-12-17
[25]
웹사이트
VSA scripting in .NET
http://www.codeproje[...]
2007-12-17
[26]
웹사이트
WWDC: Microsoft updates Universal status of Mac apps
http://www.macworld.[...]
2007-05-25
[27]
웹사이트
What is Microsoft Office and Office 365 – FAQs
https://products.off[...]
2017-12-17
[28]
웹사이트
The Reports of VBA’s Demise Have Been Greatly Exaggerated
https://blogs.msdn.m[...]
2008-12-17
[29]
웹사이트
Clarification on VBA Support
http://blogs.msdn.co[...]
2008-12-17
[30]
웹사이트
Compatibility Between the 32-bit and 64-bit Versions of Office 2010
http://msdn.microsof[...]
2010-12-17
[31]
뉴스
Excelの「マクロのセキュリティ」とは? | 日経 xTECH(クロステック)
https://xtech.nikkei[...]
[32]
뉴스
Excel のマクロのセキュリティ設定を変更する - Excel
https://support.offi[...]
[33]
뉴스
ACC: 비주얼/액세스 베이직은 둘 다 컴파일러와 인터프리터이다
http://support.micro[...]
[34]
서적
VBA로 엑셀 매크로 작성하기
http://books.google.[...]
O'Reilly
[35]
서적
워드 매크로 작성하기
http://books.google.[...]
O'Reilly
[36]
서적
엑셀: 누락 매뉴얼
http://books.google.[...]
O'Reilly
[37]
서적
VBA 및 마이크로소프트 오피스 엑셀 2007 매크로 (기업 솔루션)
https://www.amazon.c[...]
Que
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com