VBA代码下拉列表dynamic范围

我正在试图写一个macros的“n”单元(比方说100)在一个列中的多个下拉菜单。 这些下拉列表的范围(下拉值)必须从具有相同行数的表(在我们的例子中为100)中挑选出来。

我无法运行公式部分的for循环(下面突出显示)。 我希望macrosselectD2:H2范围为i = 2,D3:H3为i = 3,依此类推。 我该怎么做? 有没有其他的select呢?

期待有价值的投入。 谢谢!!

Sub S_Dropdown3() Dim wks As Worksheet: Set wks = Sheets("Sheet1") wks.Select Dim i As Integer For i = 2 To 101 With Range("B" & i).Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, **Formula1:="=Sheet2!D2:H2"** .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With Next i End Sub 

下面的代码应该可以工作:

 Option Explicit Sub S_Dropdown3() Dim wks As Worksheet Dim i As Integer Set wks = ThisWorkbook.Worksheets("Sheet1") wks.Activate For i = 2 To 101 With wks.Range("B" & i).Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=Sheet2!D" & i & ":H" & i .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With Next i End Sub 

已实施的更改:

  1. 代码格式/缩进
  2. 实现完全限定,以确保Sheet1引用运行macros的工作簿中的Sheet1 (如果有多个Excel文件打开)。
  3. 表不能被选中。只有被选中的范围被选中。 表格只能被.Activated 。 早期版本的Excel不介意。 Excel的任何版本都会在该行中引发错误。
  4. 完全符合.Range("B" & i)
  5. 最后,根据初始文章中的要求使公式模块化。