|
* 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.
- 엑셀 버전(95,97,2000,xp,2003,2007): 2016
* 아래줄에 질문을 작성하세요 >>
안녕하세요.
해결해보려고 노력을 해 보았으나
밤만새고 결국 질문을 드리게 되었습니다 ㅠㅠ
첨부파일의 뷴류표를 기준으로 폼을 만들어 보았으나,
일부 값들이 잘 안들어 오는 부분이 있어
조언을 구하고자 문의 드립니다.
예시 파일은 첨부하였습니다.
고견 부탁드립니다.
감사합니다.
==============[폴라리스님 글에 대한 답변입니다]==============
첨부화일 참고하세요...
Option Explicit
Dim rGu1 As Range, rGu2 As Range, rGu3 As Range ' 구분1 ~ 구분3
Dim rGu4 As Range, rGu5 As Range ' 품명, 규격
Dim Target As Range, rX As Range ' 임시 변수
Dim sGu As String
Private Sub UserForm_Initialize()
For Each rX In 범위("A").Cells
If rX <> "" Then Me.구분1리스트상자.AddItem rX
Next
Me.구분1리스트상자.ListIndex = 0
End Sub
Private Function 범위(구분 As String) As Range
With Sheets("단가정보분류표").Range("b2").CurrentRegion
Set 범위 = .Cells(2, 구분).Resize(.Rows.Count - 1)
End With
End Function
Private Sub 구분1리스트상자_Click()
sGu = 구분1리스트상자.list(구분1리스트상자.ListIndex)
If sGu = "" Then Exit Sub
Set Target = 범위("A")
Set rGu1 = userFind(sGu, Target)
Me.구분2리스트상자.Clear
Me.구분3리스트상자.Clear
Me.품명리스트상자.Clear
Me.규격리스트상자.Clear
Call AddItemListBox(Me.구분2리스트상자, rGu1)
구분2리스트상자.ListIndex = 0
End Sub
Private Sub 구분2리스트상자_Click()
sGu = 구분2리스트상자.list(구분2리스트상자.ListIndex)
If sGu = "" Then Exit Sub
Set Target = rGu1.Offset(0, 1).Resize(rGu1.MergeArea.Rows.Count)
Set rGu2 = userFind(sGu, Target)
Me.구분3리스트상자.Clear
Me.품명리스트상자.Clear
Me.규격리스트상자.Clear
Call AddItemListBox(Me.구분3리스트상자, rGu2)
구분3리스트상자.ListIndex = 0
End Sub
Private Sub 구분3리스트상자_Click()
sGu = 구분3리스트상자.list(구분3리스트상자.ListIndex)
If sGu = "" Then Exit Sub
Set Target = rGu2.Offset(0, 1).Resize(rGu2.MergeArea.Rows.Count)
Set rGu3 = userFind(sGu, Target)
Me.품명리스트상자.Clear
Me.규격리스트상자.Clear
Call AddItemListBox(Me.품명리스트상자, rGu3)
품명리스트상자.ListIndex = 0
End Sub
Private Sub 품명리스트상자_Click()
sGu = 품명리스트상자.list(품명리스트상자.ListIndex)
If sGu = "" Then Exit Sub
Set Target = rGu3.Offset(0, 1).Resize(rGu3.MergeArea.Rows.Count)
Set rGu4 = userFind(sGu, Target)
Me.규격리스트상자.Clear
Call AddItemListBox(Me.규격리스트상자, rGu4)
규격리스트상자.ListIndex = 0
End Sub
Private Sub 규격리스트상자_Click()
sGu = 규격리스트상자.list(규격리스트상자.ListIndex)
If sGu = "" Then Exit Sub
Set Target = rGu4.Offset(0, 1).Resize(rGu4.MergeArea.Rows.Count)
Set rGu5 = userFind(sGu, Target)
If Not rGu5 Is Nothing Then
Me.메이커텍스트상자 = rGu5.Offset(0, 1)
Me.조사단계텍스트상자 = rGu5.Offset(0, 2)
Me.단위텍스트상자 = rGu5.Offset(0, 3)
Me.거래조건텍스트상자 = rGu5.Offset(0, 4)
Me.주기텍스트상자 = rGu5.Offset(0, 5)
Me.설명텍스트상자 = rGu5.Offset(0, 6)
Me.가격텍스트상자 = rGu5.Offset(0, 7)
Else
MsgBox "규격에서 [" & sGu & "] 값를 찾을수 없습니다.", vbCritical
End If
End Sub
Function userFind(sWhat As String, rData As Range) As Range
Dim rFind As Range
Set rFind = rData.Find(sWhat, LookAt:=xlWhole)
If rFind Is Nothing Then
For Each rFind In rData.Cells
If rFind = sWhat Then Exit For
Next
End If
Set userFind = rFind
End Function
Sub AddItemListBox(lstBox As Object, rData As Range)
Dim rCell As Range
For Each rCell In rData.MergeArea.Cells
If rCell(1, 2) <> "" Then lstBox.AddItem rCell(1, 2)
Next
End Sub
|
|