我试图做我认为简单的事情变得更加困难。基本上我要做的是根据旁边单元格的选择变化填充材料列。材料列是一个下拉菜单,可从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退伍军人,所以我确信这是一件简单的事。所以我可以使用一些帮助。
答案 0 :(得分:0)
LM是一个类,类没有子或函数,类的实例具有您定义的函数/ subs。所以
Call LM.InitMaterialDropDownList(MaterialCell, LookUpRange)
应该是
Call (new LM).InitMaterialDropDownList(MaterialCell, LookUpRange)
或更短(呼叫不是必需的)
(new LM).InitMaterialDropDownList MaterialCell, LookUpRange