PROGRAMMING WORKSHOP

VSTO_4

VBA코드가 작성된 통합문서를 VSTO개발의 문서로 선택하였다면
[새문서가 아닌 이미 작성하여 사용중인 통합문서를 사용..]
이미 작성하여 사용중인 VBA코드를 VSTO개발도구내에서 호출을 하고
싶을 것이다
VSTO개발환경내에서는 VBA모듈을 볼수 없다
또한 VSTO개발환경에서 개발한 함수들을 VBA코드에서 호출을 하고 싶기도 할 것이고
그런 질문이 있어서 그것을 해보도록 하자

testVSTO.xlsb

라는 화일을 하나 만들고 Sheet1이라는 시트의 모듈에

Sub drawCircle()
Dim iCenterX As Integer
Dim iCenterY As Integer
Dim iRad As Integer
Dim sngX As Single
Dim shpX As Shape
For Each shpX In Me.Shapes
.....If InStr(Me.Name, "shp_") = 1 Then
..........shpX.Delete
.....End If
Next
iCenterX = 200
iCenterY = 200
iRad = 100
For sngX = 0 To 3.14 * 2 Step 3.14 * 2 / 36
.....With Me.Shapes.AddShape(msoShapeOval, iCenterX + iRad * Sin(sngX), iCenterY + iRad * Cos(sngX), 10, 10)
...........Name = "shp_" & sngX
.....End With
Next
End Sub

이것을 VSTO환경에서 호출 해보도록 하자
역시 오브젝트에 접근하듯이 과연 Sheet1이라는 시트의 프로시져에
어떤 경로로 접근하느냐가 가장 문제인 것이다
새프로젝트/2007통합문서만들기/기존통합문서의 사용을 선택하여
위의 VBA코드가 작성된 화일을 선택하여 만든 VSTO프로젝트에서
Sheet1에 버튼(윈도우용 콘트롤)을 하나 달고
버튼을 더블크릭하면 VSTO개발모듈이 열리고 버튼의 크릭이벤트가 나타나고
그곳에 아래와 같이 작성하면 되는 것

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
.....Globals.ThisWorkbook.Application.Run("sheet1.drawCircle")
End Sub

Globals는 개발중인 VSTO프로젝트의 전체의 우두머리격인 오브젝트이고
이것을 통하여 VSTO프로젝트의 하위 오브젝트를 찾아내려가는 편리한 것이다

별로 실용적인 것 같지는 않지만
이미 어떤 통합문서소루션을 빵빵하게 잘 짜놓았는데
이것을 VSTO로 좀더 개선하여 배포하고 싶다면 필요한 작업일것이다
또한 어떤 면에서 VBA코드가 있어야 안심을 하는 사용자들에게는
(워크시트함수가 있어야 안심하는 사용자들이 있듯이)
코드가 하나도 안보이는 모듈시트를 보면 황당해 하고 미심쩍어하고 할 수도 있으니
사용자가 VBA코드를 수정할수 있도록 할 수 있는 여지를 남겨두는 것도
사용자의 창의성을 고무시킬수 있어서 좋을 것이다

***[LOG-IN]***