이번 포스팅에서는 매출처 관리 유저폼을 만들어 보겠습니다.
기본 레이아웃은 아래의 그림과 같습니다.
검색은 텍스트 박스, 우측 상단에 텍스트 박스는 리스트뷰 선택시 선택한 idx를 넣어둘 텍스트 박스입니다.
매입처 관리 유저폼과 마찬가지로 리스트뷰를 사용했습니다.
아래의 등록, 수정, 삭제, 닫기의 4개 버튼은 레이블 컨트롤을 사용합니다.
다음은 유저폼 코드입니다.
먼저 유저폼이 실행되었을때 처리되는 코드 입니다.
Option Explicit
'폼 열릴때 실행
Private Sub UserForm_Initialize()
Call SetColumnHeaders
Call Connect_DB
Call Load_Client_DB
Cn.Close
Me.txtSearch.SetFocus
End Sub
리스트뷰의 헤더를 설정하고, DB를 연결해서 매출처 데이터를 불러온뒤 검색창에 포커스를 맞춰줍니다.
다음은 리스트뷰의 헤더를 설정해주는 코드입니다.
'리스트뷰 헤더 설정
Private Sub SetColumnHeaders()
With Me.ListClient.ColumnHeaders
.Add Text:="번호", Width:=0, Alignment:=lvwColumnLeft
.Add Text:="매출처명", Width:=150, Alignment:=lvwColumnCenter
.Add Text:="사업자등록번호", Width:=100, Alignment:=lvwColumnCenter
.Add Text:="주소", Width:=200, Alignment:=lvwColumnCenter
.Add Text:="업태", Width:=80, Alignment:=lvwColumnCenter
.Add Text:="종목", Width:=80, Alignment:=lvwColumnCenter
End With
End Sub
첫번째의 번호는 Width를 0으로 설정해 실제로는 보이지 않습니다.
리스트뷰의 첫번째 열의 Alignment는 반드시 LeftlvwColumnLeft로 설정해야 합니다.
그렇지 않을경우 리스트뷰가 제대로 표시되지 않습니다.
아래 그림은 리스트뷰의 속성입니다.
가장 중요한 속성은 View 부분은 반드시 3 - lvwReport로 설정해주셔야합니다.
데이터베이스 연결하는 코드는 첫 포스팅에서 다루었으므로 따로 다루지는 않겠습니다.
아래의 포스팅을 참고해주세요.
cookiexcel.tistory.com/22?category=976450
다음은 DB를 불러와서 리스트뷰에 넣어주는 코드입니다.
'DB 불러오기
Private Sub Load_Client_DB(Optional SerchWord As String)
Dim i, j As Integer
Dim LstItem As ListItem
Me.ListClient.ListItems.Clear
'매입처 검색
SQL = "SELECT idx, clientName, licenseNumber, address, businessConditions, businessCategory FROM client"
If SerchWord <> "" Then
SQL = SQL + " WHERE clientName LIKE '%" + SerchWord + "%'"
End If
SQL = SQL + " ORDER BY clientName"
rs.CursorLocation = adUseClient
rs.Open SQL, Cn, adOpenStatic, adLockReadOnly
'자료가 없을경우 종료
If rs.RecordCount = 0 Then GoTo ex:
With Me.ListClient
rs.MoveFirst
For j = 1 To rs.RecordCount '레코드 수만큼 입력
Set LstItem = .ListItems.Add(, , CStr(rs.Fields(0).Value))
For i = 1 To 5
If Not IsNull(rs.Fields(i)) Then
LstItem.SubItems(i) = CStr(rs.Fields(i).Value)
End If
Next i
rs.MoveNext '다음레코드로 이동
Next j
End With
ex:
rs.Close
End Sub
리스트뷰에서 마우스 클릭했을때 선택된 아이템의 idx를 텍스트박스에 넣어주는 코드 입니다.
'listview 아이템 선택
Private Sub ListClient_ItemClick(ByVal Item As MSComctlLib.ListItem)
Me.txtidx = ListClient.SelectedItem.Text
End Sub
버튼의 마우스 오버시 색깔이 변하도록 만들어 주는 코드입니다.
'유저폼에 추가한 버튼에 개수만큼 아래 명령문을 유저폼에 추가한 뒤, btnClose 를 버튼 이름으로 변경합니다.
Private Sub btnRegister_Exit(ByVal Cancel As MSForms.ReturnBoolean)
OutHover_Css Me.btnRegister
End Sub
Private Sub btnRegister_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
OnHover_Css Me.btnRegister
End Sub
'유저폼에 추가한 버튼에 개수만큼 아래 명령문을 유저폼에 추가한 뒤, btnClose 를 버튼 이름으로 변경합니다.
Private Sub btnEdit_Exit(ByVal Cancel As MSForms.ReturnBoolean)
OutHover_Css Me.btnEdit
End Sub
Private Sub btnEdit_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
OnHover_Css Me.btnEdit
End Sub
'유저폼에 추가한 버튼에 개수만큼 아래 명령문을 유저폼에 추가한 뒤, btnClose 를 버튼 이름으로 변경합니다.
Private Sub btnDelete_Exit(ByVal Cancel As MSForms.ReturnBoolean)
OutHover_Css Me.btnDelete
End Sub
Private Sub btnDelete_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
OnHover_Css Me.btnDelete
End Sub
'유저폼에 추가한 버튼에 개수만큼 아래 명령문을 유저폼에 추가한 뒤, btnClose 를 버튼 이름으로 변경합니다.
Private Sub btnClose_Exit(ByVal Cancel As MSForms.ReturnBoolean)
OutHover_Css Me.btnClose
End Sub
Private Sub btnClose_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
OnHover_Css Me.btnClose
End Sub
'아래 코드를 유저폼에 추가한 뒤, "btnXXX, btnYYY"를 버튼이름을 쉼표로 구분한 값으로 변경합니다.
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim ctl As Control
Dim btnList As String: btnList = "btnDelete, btnEdit, btnClose, btnRegister" ' 버튼 이름을 쉼표로 구분하여 입력하세요.
Dim vLists As Variant: Dim vList As Variant
If InStr(1, btnList, ",") > 0 Then vLists = Split(btnList, ",") Else vLists = Array(btnList)
For Each ctl In Me.Controls
For Each vList In vLists
If InStr(1, ctl.Name, Trim(vList)) > 0 Then OutHover_Css ctl
Next
Next
End Sub
'커서 이동시 버튼 색깔을 변경하는 보조명령문을 유저폼에 추가합니다.
Private Sub OnHover_Css(lbl As Control): With lbl: .BackColor = RGB(211, 240, 224): .BorderColor = RGB(134, 191, 160): End With: End Sub
Private Sub OutHover_Css(lbl As Control): With lbl: .BackColor = &H8000000E: .BorderColor = -2147483638: End With: End Sub
이번 포스팅은 여기까지 입니다.
다음 포스팅에서는 각 버튼별 코드를 다룰 예정입니다.
'엑셀 vba > 발주관리' 카테고리의 다른 글
매출처 관리 #4 등록, 수정 유저폼 (0) | 2021.02.20 |
---|---|
매출처 관리 #3 유저폼 버튼별 코드 (0) | 2021.02.18 |
매출처 관리 #1 테이블 만들기 (0) | 2021.02.16 |
매입처 관리폼 #4 각 버튼의 코드 및 Listview 추가 코드 (0) | 2021.02.10 |
매입처 관리폼 #3 Listview 데이터 채우기 (0) | 2021.02.09 |