2016-08-22 4 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, ... 

Затем вы можете прокручивать метки, но выполнять проверку значений.

+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

Смежные вопросы