2016-08-22 1 views
0

私は "l_MBout"、 "l_MBin"、 "l_Fin"という名前のラベルをいくつか持っています。キャプションの値は "MBout"、 "MBin"、 "LFin"などの変数に格納されます(これらの整数は常に対応するラベルのように名前が付けられ、 "l_"は付けられません)。私の考えはラベルと変数を持つループごとに

(「L_」フロントの除去)ラベル

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

の配列を定義し、ラベルに変数から値を書き込むために、このようなものを使用する

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 

だったが、それはそうです

Right(lbl, Len(lbl) - 2) 

を変数にリンクされていない(私の推測では、それはまだ文字列です)

これを行う方法はありますか?

+0

'i1'とは何か、あなたのフォームに' l_Mbout&i1'という名前のコントロールがありますか?したがって、 'i1 =" someName "なら、' l_MBinsomeName'、 'l_MBoutsomeName'、' l_GinsomeName'などのコントロールが必要です。 – Ralph

+0

"i1"は別のループ(ラベルの3行)から来ています。 。とにかく、解決策を見つけました(下記参照)。ありがとうございました:) – Moritz

答えて

1

あなたが正しいです。すべてRight(lbl, Len(lbl) - 2)は文字列であり、変数ではありません。ラベルと変数の両方を保持できるように2つの並列配列を作成することをお勧めします。

ラベルをループすることはできますが、値をチェックすることができます。

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

魅力的なように働く素晴らしいアイデア! ありがとうございました:) – Moritz

+0

それを聞いてうれしいです。 –

0

配列ではなく、自分の名前でラベルにオブジェクトを置く:

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 

次に、あなたがあなたのループ内でそのプロパティにアクセスすることができます。

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

は、以下のマークを付けたソリューションを受け取りました。 – Moritz

+0

@Moritz - あなたの喪失;-) – Comintern

関連する問題