VBA 시작하기 - Rev. A

1. MS Excel(R) 버전

2. Visual Basic 편집기 열기

3. ESCommon.dll 참조 열기


1.  MS Excel(R) 버전

VBA는 엑셀 5 버전에서부터 소개되었으나, 엑셀 97 버전부터 Visual Basic 편집 창을 사용한 것으로 알고 있습니다.  엑셀 5 버전에 대해서는 기억이 없고, 지금은 구할 수도 없으므로, 이제 부터의 강의는 엑셀 97 버전 이후에서 사용한다는 전제하에 시작하겠습니다.

경험에 의하면, 엑셀에서 ESCommon.dll의 상수 문자열(Enumerated String)을 인식하지 못하거나, Visual Basic Language 가운데 몇몇 언어을 인식하지 못하는 오류가 있을 수 있습니다.

이는 동일한 엑셀 버전임에도 불구하고, 어느 Personal Computer(PC)에서 인식을 하고 어느 PC에서는 인식을 하지 못합니다.  아직 그 원인을 알지 못해 처리 방법을 알려드릴 수가 없음을 양해해 주시기 바라오며, 혹시 사용자분들 가운데 이에 대한 해결 방안을 아시는 분은 VBA 게시판에 올려 주시면 감사하겠습니다.

이러한 점을 고려하여, 앞으로의 강의 예제에서는 가능하면 상수 문자열이나 일부 인식이 안되는 Visual Basic Language를 사용하지 않아, 예제를 다운 받아 실행하시는 경우 오류가 발생하지 않도록 할 예정입니다.

 

차례

2.  MS Excel(R)에서 Visual Basic 편집기 열기

VBA를 사용하기 위해서는, Visual Basic 코딩을 하기 위한 Visual Basic 편집기(VBE, Visual Basic Editor) 창을 열어야 합니다.

엑셀에서 VBA 코드 창을 여는 방법은 [도구] 메뉴에서 [매크로]-[Visual Basic 편집기]를 클린해 열거나, [보기] 메뉴에서 [도구 모음]-[컨트롤 도구 상자]를 클릭해 컨트롤 도구 상자를 활성화시킨 다음, 세 번째 단추인 [코드 보기] 단추를 눌러 Visual Basic 편집기 창을 열 수 있습니다.

Visual Basic 편집기에서 사용할 수 있는 창은, 사용 목적에 따라 여러 창으로 분리되어 있으며, 이들 창은 [보기] 메뉴에서 하위 메뉴를 클릭해 활성화시킬 수 있습니다.   [프로젝트 탐색기 창], [속성 창], [코드 창], [조사식 창], [직접 실행 창], [지역 창] 이 이들 창이며, 이들 창 가운데, VBA 코딩을 위해 필요한 창은 아래 그림과 같은 [프로젝트 탐색기 창], [속성 창] 및 [코드 창]입니다.

 

2.1  프로젝트 탐색기 창

엑셀에서 하나의 파일은 하나의 Book 이라고 표현합니다.  그래서 새로운 파일을 계속 열면 Book1, Book2 라는 이름으로 명명됩니다.  그리고, 파일을 하나의 이름으로 저장하면, Book1, Book2라는 이름 대신에 해당 파일 이름으로 명명됩니다.

새로운 파일을 열면 3개의 Sheet가 자동으로 생성되고, Sheet1, Sheet2, Sheet3로 명명됩니다.

위의 VBE(Visual Basic 편집) 창은 다음 강의에서 설명될 Flash_Tank_r0.xls 파일을 열었을 때의 VBE 창으로, 좌측 상단의 창이 프로젝트 탐색기 창입니다.

VBA에서 하나의 엑셀 파일은 하나의 VBA Project입니다.  그래서 프로젝트 탐색기 창의 최상위 디렉토리가 VBAProject(Flash_Tank_r0.xls)입니다.

하나의 VBA 프로젝트에는 그 하위 디렉토리로 하나의 Microsoft Excel 개체가 존재하며, 그 Microsoft Excel 개체 밑에는 Sheet 개체들과 This Workbook 개체가 존재합니다.   

Sheet 개체들은 엑셀에 포함되어 있는 각각의 Sheet를 나타냅니다.  각각의 Sheet에 적용될 Visual Basic 코드를, 해당 Sheet 개체의 코드 창에 적어 넣습니다.

This Workbook 개체는 Book 개체를 나타내며, Book에, 즉 엑셀 파일 전체에 적용될 코드를, This Workbook 개체의 코드 창에 적어 넣습니다.

VBAProject에는 Microsoft Excel 개체 외에, 폼(Form) 개체, 모듈(Module) 개체, 클래스 모듈(Class Module) 개체가 존재할 수 있습니다.  이들 개체는 [삽입] 메뉴에서 해당 개체를 클릭해 삽입할 수 있습니다.   이들 개체는 본격적인 VBA 작업을 할 때 필요한데, 아직은 필요하지 않으므로 추후 필요한 경우에 이들 개체의 사용에 대하여 설명하도록 하겠습니다.

2.2  속성 창

속성이란 각 개체의 특성을 규정하는 성질이라고 말할 수 있습니다.  좌측 하단의 창이 속성 창입니다.

위의 그림에서는 현재 "Sheet1(Flash_Tk)" 개체가 선택되어 있습니다.   그러므로, 위의 그림의 속성 창은 Sheet1(Flash_Tk) 개체의 속성입니다.   "(이름)" 이라는 속성은 그말 그대로 개체의 이름입니다.  위의 그림을 보면 이름이 Sheet1 인 것을 알 수 있습니다.  코드에서 본 Sheet를 지칭할 때, Sheet1 이라는 이름을 사용합니다.

중간의 "Name" 속성을 보면 "Flash_Tk"로 되어 있는 것을 볼 수 있습니다.  Name의 한글 표현이 이름인데, 왜 엑셀 한글판이 혼동을 일으킬 소지가 있는 속성 명칭을 사용했는지 이해가 되지 않습니다.   Visual Basic의 속성 명칭으로 미루어 볼 때, "Name" 이라는 명칭 대신에 "Caption" 이라는 명칭을 사용해야 하는 것이 아닌가 하는 생각이 듭니다.   

하여튼, "Name" 속성은 엑셀 Sheet의 하단 이름 칸에 나타나는 이름입니다.  이 곳 VBE 속성 창에서 Name 속성을 변경하면, 엑셀 Sheet 하단의 이름이 자동으로 변경됩니다.  역으로, 엑셀 Sheet 하단의 이름을 변경하면, 이 곳 VBE 속성 창의 Name 속성의 이름이 자동으로 변경됩니다.  Name 속성은 Sheet를 쉽게 구분하기 위한 이름을 명명하는 속성인데, 코드에서 Sheet 개체를 지칭할 때 사용할 수도 있습니다.

다른 속성은 본 강의에서 사용하지 않을 것이므로 설명하지 않겠습니다.

2.3  코드 창

코드 창은 본격적으로 VBA 코딩을 할 창입니다.   우측 창이 코드 창입니다.  코드 창에 대해서는 강의를 하면서 설명하도록 하겠습니다.

코딩 창 상부를 보면 2개의 드롭다운 리스트 박스가 있습니다.   왼쪽 리스트 박스가 개체를 나나태는 개체 리스트 박스이며, 오른쪽 리스트 박스가 이벤트를 나타내는 이벤트 리스트 박스입니다.  이들 박스의 리스트는 사용자가 입력하는 것이 아니고, 사용자가 개체를 추가하면 자동적으로 해당 개체와 이벤트가 추가됩니다.

맨 처음 코딩 창을 열면, 개체 리스트 박스에는 [일반]이, 이벤트 리스트 박스에는 [선언]이 나타나 있습니다.  이 곳 일반 창은 변수를 선언하는 곳입니다.  변수 선언에 대해서는 강의해 가면서 설명하기로 하겠습니다.

게체 리스트 박스를 열어보면(리스트 오른쪽 끝의 화살표를 눌러서), 아래에 [Worksheet] 개체 하나가 리스트되어 있습니다.  [Worksheet] 개체를 클릭하면, 오른쪽 이벤트 리스트 박스에 Worksheet에서 사용할 수 있는 이벤트가 나타나고, 아래쪽의 코딩 창에는 아래와 같이, Worksheet 이벤트 가운데 SelectionChange 이벤트에 대한 코딩을 할 수 있는 Sub Procedure가 자동으로 쓰여집니다.

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

End Sub

이벤트 리스트 박스에서 이벤트를 클릭하면, 이벤트에 대한 코딩을 할 수 있는 Sub Procedure가 자동으로 쓰여집니다.

이렇게 열려진 코딩 창은, 프로젝트 탐색기 창에서 현재 선택되어져 있는 Worksheet의 코딩 창입니다.  프로젝트 탐색기 창에서 다른 Worksheet를 선택하려면 해당 Worksheet를 다블 클릭해야 합니다.

2.4 프로젝트(Project), 모듈(Module), 프로시저(Procedure)

프로젝트 탐색기 창을 보면, 하나의 엑셀 파일이 [VBA Project]라는 상위 디렉토리로 존재합니다.  파일 이름이 [VBA Project] 옆의 괄호안에 기술되어 있거나, 새로운 파일인 경우에는 Book1, Book2와 같은 Book 이름이 기술되어 있습니다.   이와 같이 하나의 파일이 하나의 프로젝트입니다.

[VBA Project] 디렉토리 하위 디렉토리로, [Microsoft Excel 개체]라는 디렉토리가 있고, 그 아래에 Worksheet 개체 들이 존재합니다.  Worksheet에 모듈이라는 말이 들어가 있지는 않으나, 하나의 Worksheet가 해당 프로젝트(엑셀 파일)에 소속되어 있는 하나의 모듈입니다.

VBE(Visual Basic 편집기)의 [삽입] 메뉴를 보면, [사용자 정의 폼], [모듈], [클래스 모듈]의 하위 메뉴가 있습니다.  이들 하위 메뉴를 클릭하면, 해당 디렉토리가 생기면서 그 아래에 UserForm, Module 및 Class 이라는 개체가 해당 디렉토리에 생성되는 것을 볼 수 있습니다.  이들 개체들도 해당 프로젝트(엑셀 파일)에 소속되어 있는 하나의 모듈입니다.

하나의 모듈 안에는 여러 프로시저가 존재합니다.  프로시저란, 코딩을 담아 두는 최소 단위의 묶음이라고 할 수 있습니다.  변수 선언을 제외하고, 모든 코드는 프로시저 안에 쓰여져야 합니다.

프로시저에는 Sub Procedure, Function Procedure, Property Procedure가 있습니다.  프로시저는 VBE 메뉴 [삽입]의 하위 메뉴인 [프로시저...]를 클릭해 추가할 수 있으며, Sub Procedure의 일종인 이벤트 프로시저는 앞에서 설명한 대로, 코딩 창의 이벤트 리스트 박스에서 이벤트를 클릭해 생성시킬 수 있습니다.

Sub Procedure는 일반적으로 가장 많이 사용하는 프로시저로, 그냥 코드를 포함하는 용기로서의 역할만을 하는 프로시저입니다.

Function Procedure는 코드를 포함하는 용기의 역할을 함과 동시에, 프로시저 이름이 하나의 변수로서 역할을 하는 프로시저입니다.  엑섹의 함수들이 모두 Function Procedure로서 작성된 것들입니다.

Property Procedure는 개체의 속성을 코딩하는 프로시저로서, Class 모듈에서만 사용되는 프로시저입니다.

이들 프로시저를 설명 만으로 이해시키기가 쉽지 않으므로, 추후에 강의를 통해서 설명하기로 하겠습니다.

2.5 변수 선언

변수란 어떤 값을 담는 그릇이라고 생각하시면 됩니다.   엑셀에서 하나의 셀에 "=" 기호와 함께 계산식을 입력하면 그렇게 계산된 값이 셀에 저장됩니다.  변수란 이러한 셀에 해당되는 것입니다.  VBA에서는 셀이 없으므로, 변수를 만들어 변수에 값을 저장합니다.

변수에는 프로젝트 수준의 변수와 모듈 수준의 변수, 프로시저 수준의 변수가 있습니다.   프로젝트 수준의 변수는 프로젝트 어느 곳에서나 사용할 수 있는 변수이며, 모듈 수준의 변수는 해당 모듈에서만 사용할 수 있는 변수입니다.   어느 한 모듈에서만 사용할 수 있는 변수는, 다른 모듈에서 사용할 수가 없습니다.  여기서 사용할 수 없다는 말은, 다른 모듈에서 그 변수를 불러서 그 변수에 저장된 값을 사용할 수 없고, 그 변수에 값을 저장할 수도 없습니다.  다른 모듈에서는 그 변수가 존재하는지도 모른다는 얘기입니다.   마찬가지로, 프로시저 수준의 변수는 해당 프로시저에서만 사용할 수 있는 변수입니다.

프로젝트 수준의 변수는, 모듈의 코딩 창의 [일반]-[선언] 부분에서 "Public" 이라는 글자 다음에 선언되어야 합니다.  모듈의 코딩 창의 [일반]-[선언] 부분에서 "Private" 혹은 "Dim" 이라는 글자 다음에 선언되는 변수는 모듈 수준의 변수입니다.  프로시저 수준의 변수는 프로시저 안에서 "Dim" 이라는 글자 다음에 선언되어야 합니다.

2.6 변수 형식

변수를 선언할 때, 항상 변수의 데이터 형식을 지정해야 합니다.  정수(Integer)인지, 실수(Real)인지, 문자열(String)인지 등의 데이터 형식을 지정해야 합니다.  자주 사용하는 데이터 형식은 다음과 같습니다.

데이터 형식

설명

저장 용량

범위

Boolean

정, 부 여부

2 바이트

True 혹은 False

Integer

단정도 정수

2바이트 

-32,768 - 32,767까지

Long

배정도 정수

4바이트

 -2,147,483,648 - 2,147,483,647까지

Single

단정도 실수

4바이트 

 -3.402823E38 - -1.401298E-45까지(음수값); 1.401298E-45 - 3.402823E38까지(양수값)

Double

배정도 실수

8 바이트

 -1.79769313486232E308 - -4.94065645841247E-324까지(음수값);

4.94065645841247E-324 - 1.79769313486232E308까지(양수값)

String

문자열

10 바이트

원하는 문자열 길이

Variant

모든 데이터 형식

16 바이트

Variant로 선언된 변수는 모든 데이터 형식을 담을 수 있습니다.

변수를 선언할 때 데이터 형식을 지정하지 않으면, 모든 데이터 형식을 담을 수 있는 Variant 형식으로 간주됩니다.  하지만, 이럴 경우 데이터 저장 용량을 많이 차지하므로, 속도가 느려질 수 있습니다.  그러므로 가능하면 데이터 형식을 지정하는 것이 좋습니다.  

변수에 값을 저장할 때 변수의 데이터 형식과 다른 데이터를 저장하려고 하면 오류가 발생합니다.

3.  ESCommon.dll 참조 열기

코드 창에서 코딩을 시작하기 전에, 우선 ESCommon.dll을 참조로 열어 코드에서 ESCommon.dll의 함수들을 사용할 수 있도록 하여야 합니다.

메뉴 [도구]에서 [참조]를 클릭해 참조 창을 연 후, [찾아보기...]를 클릭해 디렉토리 "C:\Program Files\ENGSoft\Common"에서 ESCommon.dll를 선택해 ESCommon.dll 파일을 참조 창에 추가한 후, [확인]을 누르면, ESCommon.dll 참조 열기가 끝납니다.

ESCommon.dll 참조 열기를 완료한 후, [사용 가능한 참조] 리스트박스에서 "ENGSoft Inc. - Common Library"가 리스트에 있는지 확인하고, 첵크 박스를 첵크하여 사용할 수 있도록 활성화 합니다.

이제부터는 코드에서 ESCommon.dll의 함수를 사용할 수 있습니다.  이전의 ESStableD.ocx보다 ESCommon.dll 사용하기가 훨씬 쉽죠.  설치할 필요도 없고, 이런 저런 오류도 없고...

그러면 다음 강의에서 VBA 언어에 대하여 설명하기로 하죠.

 


Copyright (c) 2004 ENGSoft Inc., Seoul, Korea, All right reserved.