2014-11-01 2 views
1

나는 단순하다고 생각되는 것을하려고하는 것이 더 어려워지고 있습니다. 기본적으로 내가하려고하는 것은 옆에있는 셀의 선택 변경을 기반으로하는 재료 기둥을 채우는 것입니다. Material 열은 LookUpRange에서 값을 가져 오는 드롭 다운 메뉴입니다.Excel VBA Range 빈 값을 반환합니다.

여기에 1 부

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
Dim MaterialCellAddress As String 
Dim MaterialCell As Range 
Dim LookUpRangeName As String 
Dim LookUpRange As Range 

Select Case Target.Column 
    Case 2 
     ThisRow = Target.Row 
     MsgBox ("Changing the width") 
    Case 3 
     MsgBox ("Changing the Height") 
    Case 11 

     MaterialCellAddress = "L" & Target.Row 
     Set MaterialCell = Range(MaterialCellAddress) 

     LookUpRangeName = "LookUpRange_" & Target.Value & "Materials" 
     Set LookUpRange = Range(LookUpRangeName) 

     Call LM.InitMaterialDropDownList(MaterialCell, LookUpRange) 
    Case Else 
     MsgBox ("Something else is going on") 
End Select 
End Sub 

입니다 그리고 여기 내 LM 클래스

Public Sub InitMaterialDropDownList(ByVal MaterialCell As Range, ByVal LookUpRange As Range) 
With Sheets("Entry Form").Range(MaterialCell).Validation 
.Delete 
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=LookUpRange" 
.IgnoreBlank = True 
.InCellDropdown = True 
.InputTitle = "Select Edge Type" 
.ErrorTitle = "Invalid Edge Type" 
.InputMessage = "Select Edge Type" 
.ErrorMessage = "You must select a valid edge type from the drop down list" 
.ShowInput = True 
.ShowError = True 
End With 
End Sub 

내가 납니까 몇 가지 내부 파트 II입니다. 코드가 Set MaterialCell = Range(MaterialCellAddress) 또는이 Set LookUpRange = Range(LookUpRangeName)에 도달하면 둘 다 어떤 이유로 빈 값을 반환합니다.

그리고 물론 이걸 명중하면 ... Call LM.InitMaterialDropDownList(MaterialCell, LookUpRange) 개체 오류가 발생합니다.

저는 VBA 베테랑이 아니므로이게 어리석은 일이라고 확신합니다. 그래서 나는 약간의 도움을 사용할 수 있습니다.

+0

Call (new LM).InitMaterialDropDownList(MaterialCell, LookUpRange) 

이하이어야한다. 'MaterialCellAddress = "L"& Target.Row' 바로 뒤에'MsgBox MaterialCellAddress'를 놓고 무엇이 나오는지보십시오. 따라서 "문자 + 숫자"조합이 해당 범위의 올바른 주소인지 확인하십시오. 공백을 반환하는 다른 범위의 이름과 동일하게하십시오. 언뜻보기에 코드가 작동해서는 안되는 이유가없는 것 같습니다. –

답변

0

LM은 클래스이고, 클래스에는 서브 또는 함수가 없으며 클래스의 인스턴스에는 정의한 함수/서브가 있습니다. 그래서

Call LM.InitMaterialDropDownList(MaterialCell, LookUpRange) 

는 코드가 잘 보이는 (전화가이 켜지지되지 않습니다)

(new LM).InitMaterialDropDownList MaterialCell, LookUpRange 
+0

나는 무언가 간단한 것을 놓친다는 것을 알았다. 도와 주셔서 감사합니다. – joeb

관련 문제