본문 바로가기

wif LiNoUz/Excel

엑셀 ERP

 

겨울나무(ehun663)
카페매니저 1:1대화

■ 엑셀 2007 버전 기Microsoft Office Excel 2007

■ 억세스 2007 버전 (Microsoft Office Access 2007)

■ [VBA 기초_8] VBA 엑셀 초보자도 할수있다. [엑셀_UserForm_MSHFlexGrid 컨트롤_1]

안녕하세요

[VBA 기초_7] 까지는 DB 셋팅하는 방법까지 했네요

오늘은 DB에 연결해서 엑셀 유저폼의 MSHFlexGrid 컨트롤로 데이터를 불러오는 방법을 해보겠습니다.

엑셀의 기본 컨트롤인 Listbox 컨트롤을 사용해도 되지만 사용하기 불편해서...

무료 그리드중에서 쓸만한게 MSHFlexGrid 컨트롤입니다.

초보분들은 VBA에 대해서 뭘 질문해야될지, 무엇부터 해야 될지 모를껍니다.

일단, 여기 강좌를 따라서 만들어보시면 본인이 만들고 싶은 프로그램을 비슷하게 만들기 시작하면서

질문을 하실꺼라 생각합니다.

1. VBA 화면에서 유저폼과 모듈1개를 만드세요~

○ 유저폼과 모듈을 생성하는 방법은 앞에 강좌에서 했었죠...

- 다시 보실려면 : http://cafe.naver.com/msexcel/299

○ 아래 그림처럼 유저폼(userform1)과 모듈(Module1)이 생성했습니다.

2. 이제 유저폼에 컨트롤을 그려보겠습니다.

○ 도구상자에서 MSHFlexGrid 컨트롤을 선택해서 유저폼에 그리세요(드래그 하세요)

- MSHFlexGrid 컨트롤을 다시 보실려면 : http://cafe.naver.com/msexcel/320

○ 저는 아래 그림처럼 레이블(Label)을 사용하여 제목과 라인을 그렸고, 버튼(CommandButton)을 넣었습니다.

※ 반드시 필요한 컨트롤은 MSHFlexGrid 컨트롤입니다.

3. DB연결은 AOD를 이용하기 때문에 아래 그림처럼 관련 구성요소를 참조시켜야 됩니다.

○ Microsoft ActiveX Data Objects 2.8 Library 을 선택하세요

○ 폼에 MSHFlexGrid 컨트롤을 넣었으면 ..Microsoft Hierarchical FlexGrid..... 선택된게 보입니다.

vba 메뉴중에 도구 -> 참조를 보시면 됩니다.

위에까지 폼을 셋팅(?) 했습니다.

이제 부터는 코딩을 해보겠습니다.

코드는 전부 외울 필요가 없습니다. 저또한 기존에 사용하던넘을 복사해서 사용합니다.

1. 유저폼을 마우스로 더블클릭하세요

아래 그림 처럼 프로시저가 생성됩니다.

① Option Explicit ---> 용도는 변수선언을 요구하는 넘입니다.

변수라는거는 예를들면 서울고등학교에서 홍길동을 찾을수도 있지만 서울고등학교/3학년/1반/홍길동을 찾는게

훨씬 빠르겠죠 변수가 그런 역할을 한다고 생각하시면 됩니다. 복잡하게 설명하면 이해도 안되고 머리만 아픕니다.

-> VBA화면 메뉴에서 도구 -> 옵션 -> 변수선언 요구를 선택하세요 그러면 코딩창에 자동으로 뜹니다.

-> 변수선언 요구를 안해도 되지만... 반드시 하는게 좋습니다.

② 유저폼 클릭이라는 프로시저가 생겼습니다.

말그대로 유저폼을 클릭하면 어떤 실행을 하는 프로시저겠죠

Private Sub UserForm_Click()

End Sub

위에 있는 유저폼 클릭 프로시저를 선택(커서를 갔다 놓는다는 얘기죠) 하고

아래 그림의 오른쪽에 있는 프로시저선언 부분중에 Initialize 이넘을 선택하세요

그러면 아래 처럼 프로시저가 생깁니다.

Initialize 는 폼이 열릴때 어떤 일을 시키는 프로시저입니다.

Private Sub UserForm_Initialize()

'//// 요기에 어떤 일을 하라고 코드를 넣는거죠

End Sub

Initialize 프로시저에서 시켜야할 일들을 정리해보면...

디비에 접속, 특정테이블에 레코드(데이터)들을 가져오도록 시키겠습니다.

Option Explicit

Private Sub UserForm_Initialize()

'//변수선언

Dim DB As ADODB.Connection '//DB 접속하는 넘
Dim rs As ADODB.Recordset '//레코드개체 생성 하는 넘
Dim mySql As String '// mySql이라는 이름으로 문자열 변수 선언

'// 요기서 부터는 DB 접속하는 코드입니다.

'// DB접속에서 봐야할 코드는 ThisWorkbook.Path & "\exDB.mdb 입니다.

'// 현재 만들고 있는 엑셀 파일과 같은 경로(폴더)에 있는 exDB.mdb 파일을 지정 하는것입니다.

'// exDB.mdb 파일은 앞 강의에서 패스워드를 1111로 만들었던 파일이죠 (앞에 강의를 보셨다면 쉽게 이해하시겠죠)

'// Database Password=" & "1111" --> 요넘은 DB 접속시 패스워드겠죠

Set DB = New ADODB.Connection
DB.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & "\exDB.mdb;Jet OLEDB:Database Password=" & "1111"
DB.CursorLocation = adUseClient
DB.Open

'//요기 부터는 쿼리명령문 입니다.

'// 쿼리 부분은 나중에 다시 한번 정리를 해보도록 하겠습니다.

'//쭉 풀어서 얘길해보면... 제품현황 테이블에서 접속해서 모든 필드를 ID 순으로 정렬해서 가져오라는 내용입니다.

'/// 명령문 마지막에는 한칸 이상의 빈공간(공백)을 두셔야 합니다.

'/// (EX : * 뒤에 한칸이상 공백을 두셔야 되고, FROM 제품현황 -> 제품현황 뒤에 한칸이상 공백을 두셔야 되고

'//// order by id --> id 뒤에 빈공백을 두셔야 합니다. )

mySql = "SELECT * " '// SELECT 는 가져올 필드를 적는 부분입니다. 모든 필드를 가져올때는 별표(*)를 사용합니다.
mySql = mySql & " FROM 제품현황 " '//FROM을 가져올 테이블을 적습니다.
mySql = mySql & " order by id " '// order by는 ID로 내림차순 정렬(sort)을 하라는 명령입니다.

'//요기서부터는 레코드생성 그냥 복사해서 사용하세요~

'//위에 쿼리문을 실행하는걸로 생각하시면 됩니다.
Set rs = New Recordset
With rs
.CursorLocation = adUseClient
.ActiveConnection = DB
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.Open mySql
End With

'//밑에 코드는 위에 쿼리명령해서 만들어진 데이터를 MSHFlexGrid 컨트롤에 담는 코드입니다.

'//데이터를 하나씩 불러서 담을수도 있고 MSHFlexGrid은 한방에 데이터를 담을수도 있습니다.

Set me.MSHFlexGrid1.DataSource = rs

'//데이터를 몇개를 가져왔는지 메세지 창을 띄우는 코드입니다.

MsgBox rs.RecordCount & " 개 데이터를 불러왔습니다."

End Sub

'// 다음 코드는 유저폼을 실행하면 유저폼을 종료하는 코드입니다.

'// 유저폼에 있는 CommandButton 버튼을 더블클릭하면 프로시저가 생성됩니다. (위에 설명했죠)

'// 아래처럼 코드를 넣으세요

Private Sub CommandButton1_Click()
Unload Me '//현재 유저폼을 종료하는 코드입니다.
End Sub

'//○ 위에 까지는 유저폼 및 컨트롤에 넣는 코드이고... 밑에 부터는 모듈(Module1)에 넣는 코드입니다.

'// 폼을 실행하는 코드가 있어야 겠죠

'// 프로젝트창에 Module1 을 더블클릭하고 프로시저창에 아래 코드를 넣으세요

Option Explicit

Sub 폼불러오기() '// 제목을 정하고
UserForm1 .Caption = "제품현황" '///유저폼의 타이틀을 제품현황이라고 정하고
UserForm1 .Show '//폼을 열어라..
End Sub

'// 요기 부터는 엑셀 시트에 버튼을 만들어서 폼을 부르는 코드를 연결해야 엑셀시트에서 폼을 열겠죠

'// 시트에 단추(양식 컨트롤)를 선택해서 시트에 드레그 하세요

'// 단추가 없으면 아이콘을 등록시키면 되겠죠

'// 단추를 찾기 힘드시면.... http://cafe.naver.com/msexcel/161

'//위에서 단추를 드래그하면 아래창이 뜹니다.

'//모듈에 만들었던 폼불러오기 를 선택하시면 됩니다.

'// 이제 끝났네요.. 단추를 실행하면 아래 그림처럼 유저폼이 뜨면서 DB접속하고, 명령한 데이터를 불러왔습니다.

'// MSHFlexGrid 컨트롤에 DB의 데이터를 불러왔는데 뭔가 쫌 허접하게 보이죠

'// MSHFlexGrid 컨트롤을 다듬는 부분은 다음 시간에 하겠습니다.

'///////////////////////////////////////////////////////////////////////////////////////////////////////

'초보분들 대상으로 하다보니 자세히 설명을 했습니다. 이미 알고 있는 분들은 안보셔도 됩니다.

'코드를 이쁘게 다듬을수도 있는데 그건 나중 설명하겠습니다. 처음부터 많이 하면 싫증나거든요

'초보분들이 코드를 이해하기는 힘들꺼라는 생각이 드는데 반복적으로 하다보면 의문사항이 생기겠죠

'회사일이 바쁜데... 게시판에 직접 자료 만들어서 올리려니 힘드네요

'엑셀 강좌 파일을 만들어 첨부해서 올리면 제가 편하긴한데... 직접 하나하나 만들어봐야 실력이 늡니다.

'만들어진 파일은 게시판에 올리질 않습니다. 초보분들도 처음부터 강좌를 보시고 따라서 만들어보세요. 어렵지 않습니다.

'오늘은 요기까지 하겠습니다....

'즐거운 주말 되시길.... 끝.