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