PROGRAMMING WORKSHOP

.Net FrameWork|Google.GData.Calendar_2

새해가 되었다..
좀더 Workshop에 시간을 쏟자!!
라고 하는 것이 새해의 마음가짐이기도 하지만..아무튼 잊지말고..!!
한페이지로 GoogleCalendar를 끝내려고 하였지만 찜찜한 것이 많다
지금까지 한 것은 앞페이지에 쏘스코드를 올렸으니 참조하시고
이 페이지에서는 그 쏘스코드를 좀더 확장해 나간다
엑셀프로그래밍과 VisualBasic을 통한 VSTO프로그램으로 옮겼을때
가장 큰 차이와 낯섫음은
엑셀프로그래그래밍에서는 그냥 자체라이브러리로 뚝딱거리고
별짓을 다 했고 ..또한 그것이 엑셀의 힘이다
VSTO로 오면 외부참조가 많아진다는 것이 중요하다
그냥 엑셀의 기능만 활용하려고 한다면 그냥
엑셀자체의 프로그래밍이 최적이다
그러나 이런 저런 현대 IT의 기술을 엑셀과 공동작업을
시키려면 외부라이브러리 참조가 생활화되어야 한다는 점!!
잊지 말자
엑셀프로그래밍에서도 많이 외부라이브러리 참조를 하였지만
VSTO에서는 좀더 적극적으로 활용하게 되는 것이다

앞페이지에서 사용자계정을 매번 텍스트박스에 입력하기가
번거로운 짓이였다
몇개 사용하는 구글계정을 어디엔가 저장해 놓고 사용해야
편리 하겠다는 생각이 드는 것이 사용자들의 마음이다
또한 매번 매달 같은 내용을 구글에서 갖여 오는 것도 번거롭다
한 일년치 정도는 엑셀화일에 그냥 저장해놓고 사용해도
좋을 것이다
만약 이런 것을 엑셀이 없이 다른 VB프로그램같은 것으로
만든다면 별도의 DB를 하나 만들던가..
텍스트화일로 데이타를 보관하는 장치를 하거나
번거로운 작업을 해야 하지만
엑셀을 작은 데이타베이스나 마찬가지다
그래서 엑셀이 파워풀 한것이다

엑셀에서 수없이 해왔던 것들일 것이다
시트한장을 삽입하고 시트명을 [계정]이라고 하고
또 한장을 삽입하여 시트명을 [데이타]라고 하고
이 두장의 시트를 작은 데이타베이스로 활용하면 된다는 점
엑셀이 갖고 있는 자원의 능력이다

물론 위의 두장의 시트의 관리도 쎄련된 엑셀프로그래머와
초짜 엑셀프로그래머와는 많은 차이가 있을 것이다
초짜와 고수의 차이는???
어떤 일을 할때 에러를 내느냐..안내느냐의 차이라고 볼수 있다

[계정]이라는 시트에 아래와 같은 테이블을 A1셀을 시작으로
사용한다고 할때

아이디패스워드
xxxxxx123456

초짜는
계정시트에 정보를 저장하거나
계정시트로 부터 정보를 갖여 올때
Function GetAccount()
Dim rData As Range
Set rData=Worksheets("계정").Range("A1").CurrentRegion.Offset(2)
GetAccount=rData.Rows(1).Cells(1) & "|" & rData.Rows(1).Cells(2)
End Function

라고 할수 있을 것이다
이것은 함정 투성이다
[계정]이라는 시트가 존재하는지 확인도 안했다
Range("A1").CurrentRegion이라고 할때 테이블에 정보가
하나도 없다면
rData.Rows(1).Cells(1)은 당연히 에러다!!!

또한 계정을 갖여 올때
만약 입력텍스트상자에 입력된 계정정보가 있다면
이것을 사용하고 만약 없다면 [계정]시트의 것을 갖여 온다는
적당한 순서의 시나리오가 있어야 할 것이다
1,텍스트상자 확인한다
2,없으면 [계정]시트의 것을 갖여온다
3,[계정]시트가 존재하지 않는다면 [계정]시트를 자동으로 만들고
4,테이블을 만들고 메시지 박스를 띄운다..상황설명해주고..
5,[계정]시트가 있다고 하더라도 테이블이 없거나 기록된 [계정]이없다
6,그러면 또 메시지박스를 띄워 상황설명을 해준다
7,..
8,...
이런 나름대로의 순서가 잡혀야 하는 것이
고수들의 머리속의 움직임이다

정보를 읽어 들여 오면
현재 계정정보를 앞으로는 계속사용하겠느냐고 묻는
메시지박스를 띄우거나 하기 보다는
윈도우폼의 컨트롤을 최대한 잘 활용하는 것이 바람직하다
또한 현재 갖여온 정보도 별도의 시트에 저장하겠냐고 하는 것
보다는 컨트롤을 활용하는 것이 좋다
아래의 그림과 같이 컨트롤을 추가한다

그리고 카렌다는 자리를 많이 차지한다
컨트롤을 다양하게 활용하기 위하여 DateTimePicker콘트롤이라는 것으로
바꾸어 사용하도록 하자



기간을 월에 구애 받지 않고 여러개의 월의 기간을
지정하기도 편하다
엑셀에서 UserForm을 자주 잘 활용하셨다면
VB에서 훨씬 편해지고 파워를 얻는다
왜냐면 VB는 UserForm에 해당하는 Form과 Control이
메인 창이나 마찬가지니까!!

엑셀만 하고 계신분들도 UserForm을 적극적으로 활용하시기 바란다

컨트롤을 바꾸고 관련된 코드도 뜯어 고쳐야 할 것이다
이렇게 프로그래밍은 시시때때로 입맛에 맞게 뜯어 고쳐야 한다
뜯어 고치기 편한 방법은 항상 코딩을 할때
뜯어 고칠것을 예상을 하고 코딩을 하여야 하고..
그래서 항상 떠드는 크래스모듈등을 권하고 있는 것이다
아래와 같이 카렌다를 읽었던 변수를 다시 연결하고


'Dim datStart As Date = oCalendar.SelectionStart.Date
'datStart = DateSerial(datStart.Year, datStart.Month, 1)
'Dim datEnd As Date = DateAdd(DateInterval.Day, -1, DateAdd(DateInterval.Month, 1, datStart))
위의 것을 아래와 같이..

Dim datStart As Date = CDate(Me.DateTimePickerFrom.Text)
Dim datEnd As Date = CDate(Me.DateTimePickerTo.Text)

또한 지난번의 카렌다에 해당날짜를 굵은 글씨체로
배열에 모아서 전달하여 표현하던것은 필요없으니 지우고