2016-03-27 5 views
0

Ich habe ein 3D-Array von Zeichenfolgen, myArray (1 bis 30,1 bis 80,1 bis 20). In meinem Arbeitsbuch habe ich eine Tabelle, die den Bereich (1,1) bis (30,20) belegt. Ich möchte die validation.add Typ Verfahren verwenden, um die Zellen der Tabelle in der folgenden Reihenfolge zu validieren:Hinzufügen von Daten Validierung zu einer Tabelle von einem 3D-Array, VBA Excel

der 1. Spalte der Tabelle:

Zelle (1, 1 ) enthalten die Werte myArray (1,1, 1 ) sollte auf myArray (1,80,)

Zelle (2, 1 ) die V enthalten sollte, alues ​​myArray (2,1, 1 ) zu myArray (2,80,)

...

Zelle (30,) myArray die Werte enthalten sollte (30,1 , 1) bis myarray (30,80,)

der 2. Spalte der Tabelle:

Zellen (1, 2 ) sollten die Werte enthalten myArray (1,1, 2 ) zu myArray (1,80,)

Zelle (2, 2 ) sollten die Werte enthalten, myArray (2,1, 2 ) zu myArray (2,80,)

...

Zelle (30, 2 ), die Werte enthalten sollte myArray (30,1, 2) myarray (1,80,)

usw ..

Kurz gesagt, jede Zelle in der Tabelle sollte aus dem Array extrahieren Drop Listen mit Daten enthalten (die jeweils Spalte der Tabelle enthält Werte von einer anderen Seite des Arrays).

Ich entschuldige mich, wenn meine Frage nicht genau angegeben ist, bin ich neu zu programmieren und habe wenig Erfahrung mit VBA.

Antwort

1

Die folgende vereinfachte Lösung, um die Validierung DropDown Liste der WorksheetCell „A1“ auf Basis demonstriert das Hinzufügen auf den Array List1 Werte:

Sub AddValidation() 
    Dim List1(1 To 5) As String 
    List1(1) = 1 
    List1(2) = 2 
    List1(3) = 3 
    List1(4) = 4 
    List1(5) = 5 

    With Range("A1").Validation 
     .Add Type:=xlValidateList, Formula1:=Join(List1, ",") 
     .InCellDropdown = True 
    End With 
End Sub 

Um die Validierung Liste dynamisch zu ändern hinzugefügt Cells Arbeitsblatt finden Sie in die unten gezeigte Lösung:

Sub AddValidationDynamicList() 
    Dim List1(1 To 5) As String 
    List1(1) = 1 
    List1(2) = 2 
    List1(3) = 3 
    List1(4) = 4 
    List1(5) = 5 

    Dim str As String 
    str = Join(List1, ",") 

    For I = 1 To 5 
     With Range("A" & I).Validation 
      .Add Type:=xlValidateList, Formula1:=str 
      .InCellDropdown = True 
     End With 
     str = Mid(str, InStr(1, str, ",") + 1) 
    Next I 
End Sub 

Sie können diese Lösung weiter erweitern, die Ihren Anforderungen von usi entspricht ng multidimensionales Array.

Hoffe, das wird helfen.

+0

Scheint, dass dies den Trick tun wird. Nur noch eine Sache, die ich noch nicht verstehen kann: Wie verwende ich join() nur für einen Teil eines Arrays? Sagen Sie die erste Spalte – Sergey

+0

Diese Beispiellösung erstellt die Zeichenfolge durch Anwenden der Join() - Funktion auf das gesamte Array und dann iterativ entfernen Zeichenfolge Teile. Alternativ können Sie das Array dynamisch neu erstellen und anschließend die Funktion Join() anwenden. Aufgrund Ihrer Kommentare würde ich mich freuen, wenn Sie die Antwort akzeptieren. Sollten Sie weitere Fragen haben, posten Sie diese bitte separat, fügen Sie Ihr Code-Snippet hinzu und markieren Sie den problematischen Teil. Viel Glück mit Ihrem Projekt. Mit freundlichen Grüßen, –

+0

Vielen Dank (= – Sergey

Verwandte Themen