개요
이곳에서는 Visual Basic과 Microsoft Excel에서 사용가능한 VBA(Visual Basic Application)를 사용하는 방법에 대해 설명하겠습니다.
MS-Excel VBA와 GOM 시작
Microsoft Excel에서는 VB 엔진을 탑제하였기 때문에 사용자의 간단한 프로그래밍을 통하여 Excel Document에 대한 컨트롤을 할 수 있습니다. 이를 위해 사용자는 도구가 되는 Visual Basic의 문법과 Excel Document에 대하여 어느 정도 이해가 있어야 합니다.

Late Binding 을 사용하는 경우 타입 라이브러리를 사용할 필요가 없지만 저희가 Early Binding을 강력 권고하므로 Early Binding 이용을 가정하고 설명을 진행 하겠습니다.

타입 라이브러리를 import하는 화면

VBA 프로젝트에서 GOM을 시작위한 첫 단계는 GOM 타입 라이브러리 import입니다. 작업은 다음과 같은 순서로 진행합니다.

- Excel을 연 후 Visual Basic Editor를 엽니다.
- Visual Basic Editor 메뉴의 도구/참조를 실행합니다.
- '사용 가능한 참조'에서 P2 Library가 있는지 확인 합니다.
- P2 Library가 있는 경우 체크하고 확인을 누릅니다.
- P2 Library가 없는 경우 자료실에서 P2.tlb를 다운받아 찾아보기를 통하여 선택하고 확인을 누릅니다.
- 이로서 GOM 타입 라이브러리가 프로젝트가 import 되었습니다.

타입 라이브러리를 추가한 후 타입 라이브러리의 내용을 보실 수 있습니다. View menu의 Object Brower를 사용하여 P2 라이브러리를 선택 하시면 다음과 같은 화면을 보실 수 있습니다.

GOM 타입 라이브러리의 내용

VB, VBA에서의 Early Binding 과 Late Binding
Binding은 클라이언트가 메소드나 속성을 내부적으로 요청을 하는 방법이고 앞서 'COM, Automation 개요'에서 말한 바와 같이 Early Binding, Late Binding 두 가지 방식이 있습니다. VB, VBA에서 Binding 방식은 사용자의 변수를 선언하는 방법에 따라 결정 됩니다.

Early Binding 방식은 클라이언트가 GOM 타입 라이브러리를 import하고 타입 라이브러리에 선언된 타입대로 변수를 선언하는 방식이고 다음과 같습니다.

Dim objSymbol As GxSymbol

타입 라이브러리의 정보는 컴파일 시 이용 가능 하기 때문에 VB, VBA가 메소드나 속성을 실행하는데 빠른 접근 시간을 제공합니다.

VB, VBA에서 Late Binding 은 타입 라이브러리를 import하지 않고 Object 타입으로 변수를 선언 합니다. Object 타입으로 변수를 선언 한다면 VB, VBA는 컴파일시에는 속성이나 메소드의 주소를 결정하지 않습니다. 프로그램 실행시 속성이나 메소드의 실행이 필요할 때 'COM, Automation 개요' 에서 언급한 바와 같이 내부적으로 GetIDsOfNames와 Invoke 를 사용하여 작업을 수행하므로 느린 접근 시간을 제공합니다. 다음은 Late Binding의 한 예 입니다.

Dim objSymbol As Object

GOM 에서는 HTS의 특성상 빠른 접근을 위하여 Early Binding을 사용하는 것을 강력히 권고합니다.
VB, VBA GOM 프로그래밍
GOM 클라이언트 제작 다음 단계는 최상위 Object의 인터 페이스를 얻는 작업 입니다. GetObject, CreateObject 두 함수에 PROGID를 사용하여 최상위 Object의 인터페이스를 얻습니다. GetObject, CreateObject 둘 다 클라이언트 측에서 보면 별 차이가 없으므로 둘 중 하나를 사용합니다만 메모리 절약을 위해 GetObject를 사용하시기를 추천 합니다. 가져온 인터 페이스는 프로그램 종료 시 까지 유지하기 위해 로컬 변수가 아닌 클래스의 멤버나 글로벌에 변수에 저장해야 합니다. GOM은 Tree 모양의 Object 구조이기 때문에 이렇게 얻은 최상위 인터페이스를 통해 GOM의 모든 Object에 대한 접근이 가능합니다.

VBA 에서 Object에 대한 이벤트를 받는 방법은 여타 어느 Lauguage 보다 간단 합니다. 우선 WithEvents 지시어를 사용하여 Event Sink(Event를 받는 Object)를 선언 합니다. 그리고 코드 에디터에의 상단 왼쪽에 Object가 리스트가 되는 콤보박스에서 방금 전 선언한 Event Sink Object를 선택 합니다. 만약 Event Sink 타입이 Connectable Object(이벤트를 지원하는 GOM Object) 타입으로 선언 되었다면 콤보박스 오른쪽의 프로시저 선택 콤보박스에 선택 가능한 이벤트 핸들러가 나열 됩니다. 이벤트 핸들러를 선택하면 자동으로 이벤트 핸들러가 코드 에디터에 작성이 되고 이 안에 자신의 코드를 작성합니다. 그리고 사용자가 생성한 Event Sink Object에 이벤트를 발생 시키는 GOM Object를 할당합니다.
VB, VBA GOM 프로그래밍시 유의점
앞서 '클라이언트 유의사항'에서 언급 했듯이 클라이언트에서의 UI 처리는 중요 합니다. Excel은 화면 처리는 어떤 Language로 구현 했을 때보다 부하가 많이 듭니다. (GOM 에 상관 없이 빠른 시간내에 셀을 바꿔가면서 색상을 바꿔가는 것을 프로그래밍을 하시면 느끼실 수 있는 점 입니다.) 특히 시세 쪽 구현 시 다른 이벤트 보다 빈도 수가 많으므로 화면 처리를 최소화해야 합니다.
예제 파일
경고 : 이 예제는 GOM 사용법을 쉽게 익히기 위해 제공 하는 것으로, 이 예제를 거래에 이용 하는 중 에러나 다른 이유로 발생하는 피해는 당사에서 책임을 지지 않습니다.
2004. 05. 18 (주)델타 익스체인지

VBA 예제
 
GxChartStore 예제 <제작 버전:1.21> : 다수의 챠트 데이터 수신
GxChartStore 예제 <제작 버전:1.22> : 다수의 챠트 데이터 수신 예제에 간단한 이벤트 필터 기능 추가
GxSymbol 예제 <제작 버전:1.1> : 입력 종목코드의 5단계 호가, 현재가, 체결 표시
Multi GxSymbol 예제 <제작 버전:1.0> : 선택 월물 옵션종목의 현재가, 미결제 표시
Greeks 예제 <제작 버전:1.1> : 선택 월물 옵션종목의 그릭스 표시
Account, Position 예제 <제작 버전:1.0>
GxOrders, GxFills, GxConfirms 예제 <제작 버전:1.0>
GxOrderHandler 예제 <제작 버전:1.0>
EventFiltering을 이용한 GxSymbol 예제 <제작 버전:1.2> : VBA GxSymbol 예제에 EventFiltering 기능 추가
평가예탁금 예제 <제작 버전:1.23>

VB 예제
 
GxOrderHandler, GxEmHandler 예제 <제작 버전:1.0>
GxSymbol을 이용한 ATM 예제 <제작 버전:1.1>
GxChartData 예제 <제작 버전:1.1>
옵션 다종목 예제 <제작 버전:1.23>
포지션, 체결, 미체결 예제 <제작 버전:1.23>
자동 정정 주문 <제작 버전:1.23>
스탑, 리미트 주문 <제작 버전:1.23>
간단한 곰 연결 예제 <제작 버전:1.23>
간단한 종목 찾기 예제 <제작 버전:1.23>
간단한 최근선물조회 예제<제작 버전:1.23>
간단한 주문목록 조회 예제 <제작 버전:1.23>
간단한 계좌목록 조회 예제 <제작 버전:1.23>