对于VBA而言,这是一个很新的事情,我正在将我的发展拼凑在一起,在网上寻找答案但是遇到了麻烦。
我很难理解数据验证列表代码的创建是如何工作的。开始"使用WrkBook.Range(" H3")。验证"是我放下拉列表的地方?似乎'是'从一个帖子,但另一个似乎有" With"后跟包含列表的实际范围。其次," Formula1:= ......"我相信也是列表的位置。但是,我似乎只能将列表中包含的第一个单元格包含在列表中。提前感谢您的帮助。
Dim WrkBook As Worksheet
Dim LastCellRowNumber As Integer
Dim ListRng As Range
Dim Rng As Range
Set WrkBook = Worksheets("Misc Ref")
'Find
WrkBook.Activate
Range("A100000").Select
Range(Selection, Selection.End(xlUp)).Select
LastCellRowNumber = ActiveCell.Row
ActiveSheet.Cells(LastCellRowNumber, 1).Select
Set ListRng = WrkBook.Range(Cells(2, 1), Cells(LastCellRowNumber, 1))
With WrkBook.Range("H3").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=WrkBook.ListRng
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
答案 0 :(得分:1)
在这一行:
Set ListRng = WrkBook.Range(Cells(2, 1), Cells(LastCellRowNumber, 1))
您已经设置或指定了WrkBook
工作表对象中引用的范围对象
因此,您不必在分配 Formula1 参数时使用WrkBook.ListRng
。
此外, Formula1 参数被假定为字符串形式的源范围的地址。
所以它应该是这样的:
Formula1:= "=" & ListRng.Address
如果放置验证列表的工作表与源列表的工作表不同,则会失败。所以你可能想要添加:
Formula1:= "=" & ListRng.Address(, , xlA1, True)
这也将为您提供工作表名称。 HTH。
编辑2:根据评论而无需使用拆分功能。
Sub test()
Dim r As Range, lrow As Long
With Sheets("Misc Ref")
lrow = .Range("A" & .Rows.Count).End(xlUp).Row
Set r = .Range("A2:A" & lrow)
End With
'Debug.Print "=" & r.Address(, , xlA1, True)
With Sheets("Summary").Range("H10").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=" & r.Address(, , xlA1, True)
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
将地址属性外部参数设置为True
包括完整路径。
但是,如果将其分配给验证公式,它会自动忽略工作簿名称
因此无需使用 拆分功能 。那么无需担心撇号。 HTH。