2014-11-01 2 views
1

Я пытаюсь сделать то, что, как я думал, будет простым, оказывается сложнее. В основном то, что я пытаюсь сделать, это заполнить столбец материала, основанный на изменении выбора ячейки рядом с ним. Столбец материала представляет собой раскрывающееся меню, которое получает его значение от 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 

А вот часть II внутри моей 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

Код выглядит отлично. Попробуйте поместить «MsgBox MaterialCellAddress» сразу после 'MaterialCellAddress =« L »и Target.Row' и посмотреть, что получится. Следовательно, убедитесь, что комбинация «letter + number» является правильным адресом диапазона. Сделайте то же самое с именем другого диапазона, возвращающим пустое: на первый взгляд, похоже, нет причины, по которой ваш код не должен работать. –

ответ

0

LM - это класс, классы не имеют подмножеств или функций, экземпляры класса имеют определяемые вами функции/subs. так

Call LM.InitMaterialDropDownList(MaterialCell, LookUpRange) 

должен быть

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

или короче (звонок не обязательны)

(new LM).InitMaterialDropDownList MaterialCell, LookUpRange 
+0

Я знал, что мне не хватает чего-то простого. Спасибо за помощь. – joeb

Смежные вопросы