2016-04-04 210 views
0

enter image description here迭代通過VBA下拉列表

我有三個下拉列表的驗證,我試圖寫一些代碼,通過所有的「管理辦法」排列可用的迭代。

我可以找出遍歷一個列表的第一步(例如Iterate through an Excel dropdown/validation list和其他),但我無法弄清楚如何通過其中三個。

理想情況下,我希望以一種即使添加更多選項也能正常工作的方式進行書寫。

爲了達到這個目的,我想你需要一種方法來計算每個列表中有多少個選項,然後從0-n迭代。

任何幫助將不勝感激。

Sub LoopThroughList() 
Dim Dropdown1, Dropdown2, Dropdown3 As String 
Dim Range1, Range2, Range3 As Range 
Dim option1, option2, option3 As Range 

' *** SET DROPDOWN LOCATIONS HERE *** 
' *********************************** 

    Dropdown1 = "C6" 
    Dropdown2 = "D6" 
    Dropdown3 = "E6" 

' *********************************** 
' *********************************** 

Set Range1 = Evaluate(Range(Dropdown1).Validation.Formula1) 
Set Range2 = Evaluate(Range(Dropdown2).Validation.Formula1) 
Set Range3 = Evaluate(Range(Dropdown3).Validation.Formula1) 

For Each option1 In Range1 
    For Each option2 In Range2 
     For Each option3 In Range3 

      Worksheets("Sheet1").Range("C6:E6").Copy 
      With Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Offset(1) 
       .PasteSpecial Paste:=xlPasteColumnWidths 
       .PasteSpecial Paste:=xlPasteValues 
      End With 


     Next option3 
    Next option2 
Next option1 


End Sub 

目前,我得到這個:

enter image description here

這是通過迭代的作物類型下拉列表,但返回相同的蟲害和管理方法。我用來創建下拉列表的代碼如下:

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Target.Cells.Count > 1 Then Exit Sub 

    If Not Intersect(Target, Range("C6")) Is Nothing Then 
     Range("D6:E6").ClearContents 
    End If 

End Sub 

回答

1

執行將通過各種可能的組合迭代循環的最簡單方法是使用For Each循環。你可以找到更多關於他們的信息herehereherehere ....... !!! Etcetera ....

這將循環遍歷3個下拉列表的每個組合。您需要更改我的代碼中下拉列表的位置。

Sub LoopThroughList() 
Dim Dropdown1, Dropdown2, Dropdown3 As String 
Dim Range1, Range2, Range3 As Range 
Dim option1, option2, option3 As Range 

' *** SET DROPDOWN LOCATIONS HERE *** 
' *********************************** 

    Dropdown1 = "D8" 
    Dropdown2 = "E8" 
    Dropdown3 = "F8" 

' *********************************** 
' *********************************** 

Set Range1 = Evaluate(Range(Dropdown1).Validation.Formula1) 
Set Range2 = Evaluate(Range(Dropdown2).Validation.Formula1) 
Set Range3 = Evaluate(Range(Dropdown3).Validation.Formula1) 

For Each option1 In Range1 
    For Each option2 In Range2 
     For Each option3 In Range3 

      ' *** PERFORM CODE HERE *** 
      ' EXAMPLE 
      ' Sheets(1).Cells(1, 1) = option1 
      ' Sheets(1).Cells(2, 1) = option2 
      ' etc... 

     Next option3 
    Next option2 
Next option1 


End Sub 

編輯:

Sub LoopThroughList() 
Dim Dropdown1, Dropdown2, Dropdown3 As String 
Dim Range1, Range2, Range3 As Range 
Dim option1, option2, option3 As Range 

Dim Counter As Long 

Counter = 1 

' *** SET DROPDOWN LOCATIONS HERE *** 
' *********************************** 

    Dropdown1 = "C6" 
    Dropdown2 = "D6" 
    Dropdown3 = "E6" 

' *********************************** 
' *********************************** 

Set Range1 = Evaluate(Range(Dropdown1).Validation.Formula1) 
Set Range2 = Evaluate(Range(Dropdown2).Validation.Formula1) 
Set Range3 = Evaluate(Range(Dropdown3).Validation.Formula1) 

For Each option1 In Range1 
    For Each option2 In Range2 
     For Each option3 In Range3 

      Sheets(2).Cells(Counter, 1) = option1 
      Sheets(2).Cells(Counter, 2) = option2 
      Sheets(2).Cells(Counter, 3) = option3 
      Counter = Counter + 1 

     Next option3 
    Next option2 
Next option1 


End Sub 
+0

謝謝你,我已經試過在我的代碼使用這個(見我的文章編輯),但它似乎並沒有越來越近了第一個選項。 – PaulBarr

+0

如果您正在嘗試獲取所有可能組合的列表,請嘗試使用我的第二個代碼 –

+0

對不起,我一直花費更多時間在這個上,它實際上只是遍歷第一個下拉列表,但對於第二個和第三個:在我的回答中,我已經包括了它的產生和例子。 – PaulBarr