Excel VBA范围返回空

我试图做我认为简单的事情变得更加困难。 基本上我想要做的是根据旁边单元格的select变化填充一个材料列。 材质栏是一个下拉菜单,它从LookUpRange中获取它的值。

这是第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 

我注意到一些事情。 当代码命中Set MaterialCell = Range(MaterialCellAddress)或者这个Set LookUpRange = Range(LookUpRangeName) ,由于某种原因,这两个返回值都是空的。

当然,当我打这个… Call LM.InitMaterialDropDownList(MaterialCell, LookUpRange)它抛出一个对象所需的错误。

我不是一个vba的老将,所以我敢肯定,这是愚蠢的简单。 所以我可以使用一些帮助。

LM是一个类,类没有subs或函数,类的实例有你定义的函数/ subs。 所以

 Call LM.InitMaterialDropDownList(MaterialCell, LookUpRange) 

应该

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

或更短(不需要打电话)

 (new LM).InitMaterialDropDownList MaterialCell, LookUpRange