Excel VBA范围返回空

时间:2014-11-01 00:46:05

标签: excel vba excel-vba

我试图做我认为简单的事情变得更加困难。基本上我要做的是根据旁边单元格的选择变化填充材料列。材料列是一个下拉菜单,可从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退伍军人,所以我确信这是一件简单的事。所以我可以使用一些帮助。

1 个答案:

答案 0 :(得分:0)

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

Call LM.InitMaterialDropDownList(MaterialCell, LookUpRange)

应该是

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

或更短(呼叫不是必需的)

(new LM).InitMaterialDropDownList MaterialCell, LookUpRange
相关问题