我試圖做我認爲簡單的事情變得更加困難。基本上我想要做的是根據它旁邊單元格的選擇變化來填充材質列。材質欄是一個下拉菜單,它從LookUpRange中獲取它的值。Excel VBA範圍返回空
這是第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老將,所以我敢肯定這簡直是愚蠢的事情。所以我可以使用一些幫助。
的代碼看起來不錯。試着在'MaterialCellAddress =「L」&Target.Row'後面加上一個'MsgBox MaterialCellAddress',看看結果如何。因此,請驗證組合「字母+數字」是範圍的正確地址。用另一個返回空的範圍的名稱做同樣的事情:乍一看,你的代碼似乎不應該工作。 – 2014-11-01 01:25:55