将单元格数据validation设置为variables列表中的列表

对于VBA来说,这是一个相当新颖的东西,并且正在将我的开发一步一步地在网上寻找答案,但却遇到了一些障碍。

我正在努力了解如何创build数据validation列表代码的作品。 开始“与WrkBook.Range(”H3“)。validation”是我把下拉列表? 似乎是从一个post“是”,但另一个似乎有“随着”,其次是包含列表的实际范围。 其次,“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 

在这一行中:

  Set ListRng = WrkBook.Range(Cells(2, 1), Cells(LastCellRowNumber, 1)) 

您已经设置或分配了WrkBook表单对象引用的范围对象。
所以你不必在分配Formula1参数时使用WrkBook.ListRng
此外, Formula1参数假定为stringforms的源范围的地址。

所以它应该是这样的:

 Formula1:= "=" & ListRng.Address 

如果放置validation列表的工作表不是源列表的同一工作表,这将失败。 所以你可能想要添加:

 Formula1:= "=" & ListRng.Address(, , xlA1, True) 

这也会给你工作表名称。 HTH。

编辑2:基于评论,无需使用分割function

 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 

Address属性的外部参数设置为True包括完整path。
但是,如果将其分配给validation公式,则会自动忽略工作簿名称。
所以不需要使用分割函数 。 那么不用担心撇号。 HTH。