2016-08-22 3 views
0

Ich struggeling Realisierung einer Benutzerform Ich habe mehrere Etiketten mit dem Namen "l_MBout", "l_MBin", "l_Fin" und viele mehr. Die Werte für die Beschriftungen werden in Variablen gespeichert, die "MBout", "MBin", "LFin" usw. heißen (Dies sind berechnete Ganzzahlen - immer wie die entsprechenden Beschriftungen benannt, aber ohne "l_"). Meine Idee war, ein Array für die EtikettenFür jede Schleife mit Etiketten und Variablen

Public labelarray As Variant 
labelarray = Array("l_MBin", "l_MBout", "l_Gin", "l_Gout", "l_Fin", "l_Fout", "l_DLZMB", "l_DLZG", "l_DLZF") 

und verwenden, so etwas zu definieren, die Werte aus den Variablen auf die Etiketten (Entfernen der Front „l_“)

Public lbl As Variant 

For Each lbl In labelarray 
    If Right(lbl, Len(lbl) - 2) > 0 Then 
     Managementsitzung.Controls(lbl & i1).Caption = Right(lbl, Len(lbl) - 2) 
    Else 
     Managementsitzung.Controls(lbl & i1).Caption = "-" 
    End If 
Next lbl 

zu schreiben, aber es scheint, die

Right(lbl, Len(lbl) - 2) 

ist nicht auf die Variable verknüpft (meine Vermutung ist es immer noch ein String)

Gibt es eine Möglichkeit, dies zu tun?

+0

Was ist 'i1' und gibt es Steuerelemente auf Ihrem Formular mit dem Namen' l_Mbout & i1'? Also, wenn 'i1 = "someName" ', dann muss es Steuerelemente mit dem Namen' l_MBinsameName', 'l_MBoutsomeName',' l_GinsomeName', etc. geben. – Ralph

+0

das "i1" kommt aus einer anderen Schleife (3 Reihen von Etiketten) .. Wie auch immer, eine Lösung gefunden (siehe unten). Danke :) – Moritz

Antwort

1

Sie richtig sind. Alle Right(lbl, Len(lbl) - 2) ist eine Zeichenfolge, keine Variable. Darf ich vorschlagen, zwei parallele Arrays zu erstellen, so dass Sie sowohl die Beschriftungen als auch die Variablen halten können.

labelarray = Array("l_MBin", "l_MBout", "l_Gin", "l_Gout", "l_Fin", "l_Fout", ... 
valarray = Array(Mbin, MBout, Gin, Gout, Fin, Fout, ... 

Dann können Sie die Etiketten durchlaufen, aber überprüfen Sie die Werte.

For i=lbound(labelarray) to ubound(labelarray) 
    If valarray(i) > 0 Then 
     Managementsitzung.Controls(labelarray(i) & i1).Caption = valarray(i)  
    Else 
     Managementsitzung.Controls(labelarray(i) & i1).Caption = "-" 
    End If 
Next i 
+0

tolle Idee, funktioniert wie ein Charme! Danke :) – Moritz

+0

Freut mich zu hören. –

0

das Label Put Objekte im Array, nicht ihre Namen:

Option Explicit 
Private labelarray As Variant 

Private Sub UserForm_Initialize() 
    labelarray = Array(l_MBin, l_MBout, l_Gin, l_Gout, l_Fin, l_Fout, l_DLZMB, l_DLZG, l_DLZF) 
End Sub 

Dann können Sie ihre Eigenschaften in der Schleife zuzugreifen:

Dim lbl As Variant 

For Each lbl In labelarray 
    With lbl 
     If Right(.Name, Len(.Name) - 2) > 0 Then 
      .Caption = Right(.Name, Len(.Name) - 2) 
     Else 
      .Caption = "-" 
     End If 
    End With 
Next 
+0

nahm die Lösung markiert unten, danke :) – Moritz

+0

@Moritz - Dein Verlust ;-) – Comintern