2016-04-04 14 views
0

enter image description hereIterate durch VBA Dropdown-Liste

Ich habe drei Drop-Down-Listen Validierung und ich versuche, einige Code, wird für alle der „Managementmethoden“ Permutationen zu schreiben, die verfügbar sind.

Ich kann den ersten Schritt der Iteration durch eine Liste (zum Beispiel Iterate through an Excel dropdown/validation list und andere) herausfinden, aber ich kann nicht herausfinden, wie man durch drei von ihnen geht.

Idealerweise möchte ich, dass dies so geschrieben wird, dass es auch funktioniert, wenn Sie weitere Optionen hinzufügen.

Um dies zu erreichen, möchte ich einen Weg zu zählen, wie viele Optionen gibt es in jeder Liste und dann von 0-n durchlaufen.

Jede Hilfe würde sehr geschätzt werden.

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 

Im Moment bekomme ich dies:

enter image description here

Dies wird durch den Pflanzenart Dropdown Iterieren aber das gleiche für Schädlinge und Management-Methoden zurück. Der Code, den ich verwenden, um die Drop-Down-Liste zu erstellen, ist wie folgt:

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 

Antwort

1

Der einfachste Weg, Schleifen auszuführen, die durch jede mögliche Kombination durchlaufen werden, ist eine For Each Schleife zu verwenden. Sie können mehr Informationen über sie here und here und here und here finden ....... !!! Etcetera ....

Dies wird durch jede Kombination von 3 Dropdown-Listen durchlaufen. Sie müssen den Speicherort der Dropdown-Felder in meinem Code ändern.

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 

EDIT:

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

Vielen Dank, ich habe versucht, dies in meinem Code zu verwenden (siehe bearbeiten in meinem Beitrag), aber es scheint nicht über die erste Option erhalten werden. – PaulBarr

+0

Wenn Sie versuchen, eine Liste aller möglichen Kombinationen zu erhalten, versuchen Sie meinen zweiten Code über –

+0

Sorry, ich habe etwas mehr Zeit damit verbracht und es tatsächlich nur durch die erste Dropdown-Liste iteriert, aber das gleiche für die zweite und dritte : In meiner Antwort habe ich und Beispiel von dem, was es produziert. – PaulBarr