PROGRAMMING WORKSHOP

Skip Navigation Links. Skip Navigation Links.

VSTO_8 | RANDOM class

버튼을 크릭하면 시트에 값을 뿌리는 것을 알아야겠다
문제는 어떻게 워크시트에 접근 할 것인가???
버튼을 크릭하면 발생하는 이벤트프로시져에 아래와 같이 작성하면 ..

Sub myButton_Clicked(ByVal sender As Object, ByVal e As System.EventArgs) Dim sCaption As String = CType(sender, System.Windows.Forms.Button).Text Dim iXNum As Integer = (New Random).Next(5, 30) Dim iYNum As Integer = (New Random).Next(5, 30) Globals.Sheet1.Cells.ClearContents() For iX As Integer = 1 To iXNum For iY As Integer = 1 To iYNum Globals.Sheet1.Cells(iX, iY).value = sCaption Next Next End Sub

엑셀 VBA와는 많이 낯선것들이 나타날 것이다
엑셀의 자원을 사용하는 것이 아니고 .Net FrameWork에서 제공하는
더더욱 풍부한 자원을 활용하니 당연해진다
VSTO를 사용한다고 하는 것은 그냥 인터페이스만 좋게 하고 코드를
감출수 있다는 그런 차원이 아닌 것이다
좀더 풍부한 자원을 활용할수 있다는 혜택을 보자는 것이다

버튼을 인식하는 것은
Dim oBtn As System.Windows.Forms.Button=CType(Sender,System.Windows.Forms.Button)
이것을 약식으로 표현하면
Dim oBtn As Button=CType(Sender,Button)
풀패스를 알고 단축형으로 쓰는 것과 모르고 쓰는 것은 기초가 튼튼한가..아닌가의
문제가 되는 것이다..풀패스를 모르면 응용력이 없다

VBA에서 난수를 발생시킬때는 Rnd()함수를 하나 달랑사용했었다
그런데 .Net FrameWork는 Random이라는 크래스..오브젝트를 제공해준다
위에서 난수를 만드는 구문..
Dim iXNum As Integer = (New Random).Next(5, 30)

정식으로 표현한다면
Dim oRandom As New System.Random
Dim iXNum As Integer=oRandom.Next(5,30)이라고 할수 있을 것이다
그러나 아래와 같이 편리한 VB.Net의 표현 방식이 얼마나 간단한가??
Dim iXNum As Integer=(New Random).Next(5,30)

좀더 Radom 크래스가 해주는 일들을 살펴보자면..

Random크래스를 초기화하여 oMyRandom오브젝트를 생성한후 이것을 활용하여
Dim oMyRandom As New Random()
Dim iNumber As Integer
iNumber = oMyRandom.Next()

이라고 하면 1에서 부터 2,147,483,647까지의 숫자내의 난수를 만들어주고
또 아래와 같이 하면
iNumber=oMyRandom.Next(30,100)
30을 포함하고 100보다 작은 숫자내의 난수를 발생하고
그냥 아래와 같이 매개변수를 하나만 전달하면
iNumber=oMyRandom.Next(100)
0에서 부터 100보다 작은 숫자내의 난수를 만들어 준다
만약 VBA의 Rnd함수같이 0에서 부터 1사이의 소숫점숫자를 발생시키고자 하면
Dim iNumber As Double=oMyRandom.NextDouble()
와 같이 NextDouble메소드를 사용하여 소숫점숫자를 만들어낸다
이때는 이값을 받는 변수의 타입은 당연히 Double이나 Single이어야 하겠지
또 간단하게 0에서 부터 255까지 Byte값내의 것을 얻고 싶다면
Dim iNumber As Byte=oMyRandom.NextByte()
라고 하면 될 것이고..

VSTO로 엑셀소루션을 개발하는 요령은 별로 복잡하지 않다
문제는 어떻게 .Net FrameWork의 자원들을
(위에서 간단히 소개한 Random크래스는 새발의 피다..)
MS가 계속 만들어내는 보물상자를 어떻게 활용하느냐가 문제 인것이다

그러니 내친김에 앞으로는 .Net FrameWork의 자원들을
하나..하나 헤집어 보도록 하는 것이 좋을 것 같다
그럼 제목도 바꿔 걸어야 할 것 같다..
그냥 당초에는 VSTO로 엑셀소루션만들기 정도로 하려고 하였던 것인데..
아무튼..계속 진행하도록 하자!!

도대체 크래스들이 뭘까???라고 가물가물하신 분들은
위의 Random크래스와 똑같이 엑셀의 사용자정의 크래스로 만들어서
아래에 올려 놓았으니 위의 내용의 이해의 도움이 되시기 바란다
아마도 엑셀의 사용자정의 크래스모듈을 도대체 왜 강조했었는지
이해하실수 있을 것이다..
더 넓은 바다에 나가서 헤쳐나갈수 있는 내공을 키우기 위한 것인데..
픽픽..거리고 거들떠 보려고 하지 않으신분들은 꼭 다운 받아서
이해를 돕기 바란다

***[LOG-IN]***

아래의 그림과 같이 VBA는 VB와 같은 언어식구였다
그러나 그래서 각각 사용하는 함수들도 거의 같고 문법도 같았다
그러나 VB도 .Net FrameWork를 사용하게 되면서
스스로 갖고 있는 함수도 물론 지금도 VSTO...Visual Studio에서 사용할수 있다
하지만 .Net FrameWork의 것도 같이 사용할수 있는 것이고
위의 난수를 만드는 함수도 역시 VBA도 갖고 있고 VB도 갖고 있고
언어마다 죄다 갖고 있는 것이다
그러나 .Net FrameWork의 크래스는 모든 언어가 공통으로 불러서 사용할수 있다는 것이다