Поместите переменную в имя пользовательской формы

У меня есть следующий код в подфункции:

If Auswertung.Controls("T" & Te & "F" & Fr & "Option1").Value = False Then
    falseSelection = falseSelection + 1
end If

If Auswertung2.Controls("T" & Te & "F" & Fr & "Option1").Value = False Then
    falseSelection = falseSelection + 1
end If

Существует 15 пользовательских форм, поэтому мне нужно использовать переменную для имени пользовательской формы.

"Auswertung" & X & .Controls("T" & Te & "F" & Fr & "Option1").Value
(This is wrong, but I do not know which capabilites VBA has)

Есть ли способ сделать это?


person projektalex    schedule 24.07.2013    source источник


Ответы (1)


Доступ к VBA

Вот как вы перебираете все формы проекта. В вашем случае вы можете изменить его для хранения в переменной, а затем запустить проверку .Name, чтобы увидеть, соответствует ли он нужной вам форме.

Dim f
For Each f In CurrentProject.AllForms
    Debug.Print f.Name
Next

ИЛИ вы можете просто обратиться к форме по ее имени следующим образом

Forms.Item("Auswertung" & X).Controls

Excel VBA

Dim f As Object
For Each f In VBA.UserForms
    Debug.Print f.Name
Next
person ashareef    schedule 24.07.2013
comment
Второй метод с Forms.Item выдает ошибку времени выполнения 424: Требуется объект. Что я могу сделать? - person projektalex; 24.07.2013
comment
Когда я печатаю формы, он не получает заглавную букву, индикатор для данного объекта в VBA. - person projektalex; 24.07.2013
comment
Это в аксессе или экселе? - person ashareef; 24.07.2013
comment
У меня Эксель. Я взял ваш пример с Dim f в качестве объекта. Но я не знаю, что делать после Debug.Print f.Name. Я думал, что после этого должен написать следующую строку: f.Name.Controls(T & Te & F & Fr & Option1).Value, но это не сработало. Я думаю, что это должно иметь какое-то отношение к Debug.Print, вместо этого я должен использовать другой код? - person projektalex; 26.07.2013
comment
Если я объявлю f.Name как переменную (строку) следующим образом: Dim StringN как String, а затем f.Name = StringN, а затем StringN.Controls... появится сообщение об ошибке компиляции: недопустимый квалификатор. - person projektalex; 26.07.2013
comment
Debug.Print — это просто что-то, что нужно напечатать в промежуточное окно (Control+G, чтобы открыть/закрыть его). Перед тем, как вы обратитесь к элементам управления, вы должны сделать if f.Name Like "Auswertung" then, чтобы определить, является ли этот объект формой, которую вы хотите. Затем, чтобы обратиться к элементам управления в форме, вы должны сказать f.Controls("myControlName"). - person ashareef; 29.07.2013
comment
F — это переменная, как тип объекта пользовательской формы. f.name — это одно из его многих свойств, являющееся его именем в виде строки (f.tag, f.controltiptext, f.caption — это другие свойства f, а также строки) - person Patrick Lepelletier; 17.04.2016
comment
например, если f имеет элемент управления с именем label1, вы можете обращаться к нему как f.label1 или f.controls("label1"). Если вы хотите сослаться на SUB или FUNCTION кода пользовательской формы, на который указывает f, вы можете использовать f.SubName , но подпрограмма или функция должны быть Public. - person Patrick Lepelletier; 17.04.2016