2016-08-22 142 views
0

我很努力實現一個用戶表單我有幾個標籤叫做「l_MBout」,「l_MBin」,「l_Fin」等等。標題的值存儲在名爲「MBout」,「MBin」,「LFin」等變量中(這些是計算整數 - 總是像相應的標籤一樣命名,但沒有「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") 

和使用這樣的從變量的值寫入標籤(去掉前面的「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 

但似乎在

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)是一個字符串,而不是一個變量。我可以建議製作兩個平行陣列,以便可以同時存放標籤和變量。

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

然後您可以遍歷標籤,但是請檢查值。

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