2017-02-16 77 views
1

我正尝试在列中为“n”个单元格(比方说100个)中的多个下拉菜单编写宏。这些下拉列表的范围(下拉值)必须从具有相同行数的表中挑选(在我们的例子中为100)。具有动态范围的下拉列表的VBA代码

我无法运行公式部分的for循环(下面突出显示)。我想让宏选择D2:H2范围为i = 2,D3:H3为i = 3,依此类推。我该怎么做?除此之外还有其他选择吗?

期待宝贵的投入。 谢谢!

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 

回答

1

下面的代码应该工作:

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. 实现充分的资格,以确保Sheet1Sheet1工作簿中的自运行宏(如果有多个Excel文件打开)。
  3. 表不能是.Selected只有范围被选中。表格只能是.Activated。早期版本的Excel不介意。 Excel的任何版本都会在该行中引发错误。
  4. 完全符合条件.Range("B" & i)
  5. 最后,使公式按照初始文章中的要求模块化。
+0

它的工作完美。非常感谢 :) –