2017-02-16 73 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

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