|
* 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.
- 엑셀 버전(95,97,2000,xp,2003,2007):
* 아래줄에 질문을 작성하세요 >>
안녕하세요?
고수님들 새해 복 많이 받으세요.
같은 날짜에 여러 발주번호가 있는데, 날짜를 입력하면 발주번호가 중복제거되어 유효성목록으로 뿌려지게 하고싶은데 참 어렵네요.
해결이 안되서 고수님의 도움을 받고싶습니다.
==============[권순원님 글에 대한 답변입니다]==============
Worksheet 이벤트를 이용하였습니다.
발주일을 입력하거나 선택하면 발주번호에 유효성 목록이 나타납니다.
첨부화일 참고하세요.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Target.Row < 3 Then Exit Sub
If Target.Column <> 1 Then Exit Sub
If Target = "" Then
Target.Cells(1, 2).Validation.Delete
Exit Sub
End If
Call userValidation(Target)
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Target.Row < 3 Then Exit Sub
If Target.Column <> 1 Then Exit Sub
If Target = "" Then
Target.Cells(1, 2).Validation.Delete
Exit Sub
End If
Call userValidation(Target)
End Sub
Private Sub userValidation(rTg As Range)
Dim rData As Range, rX As Range
Dim oList As Object
Dim vX
With Worksheets("발주관리")
Set rData = .Range(.Range("A3"), .Range("A3").End(xlDown))
End With
Set oList = CreateObject("System.Collections.ArrayList")
For Each rX In rData.Cells
If rTg = rX Then
vX = rX.Cells(1, 3)
If oList.Contains(vX) Then
Else
oList.Add vX
End If
End If
Next
oList.Sort
vX = Join(oList.ToArray, ",")
oList.Clear
With rTg.Cells(1, 2).Validation
.Delete
If vX <> "" Then
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=vX
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.IMEMode = xlIMEModeNoControl
.ShowInput = True
.ShowError = True
End If
End With
End Sub
|
|