PROGRAMMING WORKSHOP

Financial Planning |메뉴시스템_2

한전에서 사고가 나서 전국이 죄다 한꺼번에 불이 나가 버린다면 곤란 할 것이다
비행기가 날아가다 자동화시스템이 죽어서 비행기가 통제불능이 되면 곤란 할 것이다
자동화를 한다고 처음 부터 끝까지 한꺼번에 후루룩 끝나게 한다면
어느 한곳에서 문제가 생기면 죄다 죽여야 한다..그럼 안되겠지!!
기능 별로 메뉴를 구성하고 메뉴별로 관리통제가 될 수 있는
모듈을 구성하는 것이 원칙이다
이제 막 VBA를 시작하는 분들에게는 뭔소린가 싶을 것이다
그냥 프로시져몇개 돌리면 되는 것 아닌가????!!
이런 분들은
UNO_Weekly코너의 엑셀 Add-In 버전에서의 코드라이브러리에 예를 들어서

Function IsSheetExist(sShtName As String) As Boolean
On Error Resume Next
IsSheetExist = Worksheets(sShtName).Name <> ""
End Function

와 같은 함수를 올려 놓아도 활용하는 요령을 잘 모른다
함수도 많고, 프로시져도 많다
어떤것은 어떤용도에 사용되고 어떤 것은 또 다른 용도에 사용되고
어떤 것은 중복되고 이런 것을 잘 분류하는 요령을 갖추어야 한다
물론 이런 것은 많은 경험을 통하여 직관적으로 얻어지지만
그런 것을 이야기 해드리고 싶은 것이다

위에 짧게 소개한 함수는 많은 곳에서 자주 사용하게 되는 것중의 하나다
BS시트를 만들고 싶을때도 사용하게되고
다양한 추정시크를 만들고 싶을때도 사용되어야 하고..
다양한 보고서시트를 만들고 싶을때도 사용되어야 하고..
이런 함수는 공통적으로 사용되는 함수들 중의 하나인 것이다

시트를 많이 삽입하고 접근해야 한다
통합문서를 이런 저런 것을 열었다 닫았다 해야 한다
이런 것들은 모든 작업에 공통적이라고 할 수 있는 것이다
또 테이블도 시트마다 있다
테이블에 접근하기가 또 만만치 않다
이런 시트에서는 테이블 양식을 이렇게 사용하고
저런 시트에서는 테이블 양식을 저렇게 사용하고
중구난방을 바로 잡는 것도 프로그래밍에서 해야 할 일이다
그런 것도 공통적인 사항이 될수 있을 것이다

아래의 그림과 같이 모듈시트 사용하는데 인색하지 않는 것이 좋다

성격이 아주 유사한 작업일 경우에는 하나의 모듈에 두개의 메뉴내용을
담을수도 있겠으나 원칙을 아래와 같이 하면 좋을 것이다



전체 프로세스가 잘못되거나 수정을 하거나 추가를 하거나 할때
하나의 작은 프로세스를 잘라 내버릴수도 있고
또 다른소루션을 만들때 유사한 형태의 작업에 모듈시트만 달랑떼어서
재사용할 수 있는 생각을 항상 하고 있는 것이
융통성이 있고 전체흐름을 항상 잘 콘트롤할수 있게 된다
조금더 발전 된 것이 크래스모듈이 있으나..이 것을
이야기하면 알레지들이 돋으니까..그냥 모듈시만으로도 충분하니까
모듈단위로 이야기를 해 나가 보도록 한다

이렇게 각각의 작업모듈이 있을 수도 있고
위에서 소개한 간단하지만 이곳 저곳에서 사용하는 모듈은
공통모듈시트 modCommon 같은 별도의 모듈시트를 사용하면 좋다

모듈시트의 앞 두문자는 위에서는 mod라고 하였으니
이것은 각자의 기호에 따라서 편리하게 붙이면 좋을 것이고
아무튼 modCommon이라는 모듈시트를 하나 만들고
이곳에 아래와 같은 함수를 하나 만든다

Function GetSheet(sSheetName As String, bCreateNew As Boolean) On Error Resume Next Dim shtX As Worksheet Set shtX = ThisWorkbook.Worksheets(sSheetName) If shtX Is Nothing Then CREATE_NEW: Set shtX = ThisWorkbook.Worksheets.Add shtX.Name = sSheetName Else If bCreateNew Then Application.DisplayAlerts = False shtX.Delete Application.DisplayAlerts = True GoTo CREATE_NEW End If End If With shtX.Range("B2") .Font.Bold = True .Font.Size = 14 End With Set GetSheet = shtX End Function

위의 함수를 각각의 modWork_A, modWork_B,,,등에서 공통으로
불러서 사용하게 된다
이렇게 공통으로 사용하게 되는 함수들이 많은 것이다
그리고 각각의 모듈시트에 아래와 같이 작성하고
아래의 것은 modWork_A의 경우 각 모듈마다 약간의 수정이 있어야겠지!!

Const ME_CAPTION As String = "분석_A" Sub Main() Dim shtX As Worksheet Set shtX = modCommon.GetSheet(ME_CAPTION, True) With shtX .Activate .Range("B2") = ME_CAPTION & "___" & Now End With End Sub

그리고 각메뉴를 크릭하였을때
각각의 모듈시트의 Main()프로시져를 여하히 호출할 것인가를
작성하면 전체가 시스테믹하게 작동되게 되는 기본의 틀이 갖추어져가게
되는 셈이다

소화시킬수 있는 분량씩만 진행하여
이 씨리즈를 마치면 중장기재무전략 같은 것 외에도 다양한 큰 소루션을
만드는 기본틀이 잡히게 될 것으로 믿고 진행한다
이해가 안되면 질문 하시고..!!

아래의 첨부된 화일을 열고 위의 내용들을 확인하고 일부 메뉴는 실행구문이 없으니
위의 것을 기본으로 각자 창의적으로 응용해보는 여지를 남겨 두었다

***[LOG-IN]***