Как манипулировать элементами управления в отдельной пользовательской форме? - PullRequest
0 голосов
/ 28 июня 2019

У меня есть две формы: одна с креативным именем UserForm1, где происходит вся моя магия, и две, SettingsForm, где пользователь может настроить некоторые параметры. UserForm1 может открыть SettingsForm и загрузит все сохраненные настройки при инициализации в будущем.

Проблема, с которой я сталкиваюсь, заключается в обновлении открытой в настоящий момент UserForm1 вновь выбранных настроек, когда они сохраняются в SettingsForm. Одним из таких параметров является выбор по умолчанию в группе кнопок выбора.

Я попытался изменить цикл, который я использую в других местах, для работы с группами опций, изменив Me.Controls на [Forms]![exportForm].Controls, но это выдает ошибку. Я никогда раньше не ссылался на элементы управления в другой форме, поэтому я не совсем уверен, что я делаю (читай: я совершенно не в курсе). (defBGU - строка, определенная в предыдущем коде)

Dim opt As Control
For Each opt In [Forms]![exportForm].Controls
    If TypeName(opt) = "OptionButton" Then
        If opt.Name = defBGU Then
            opt.Value = True
        End If
    End If
Next

1 Ответ

1 голос
/ 28 июня 2019

Форма пользователя - это класс в VBA, и вы можете (и должны) использовать переменную для доступа к нему. Обычно вы пишете в своем коде что-то вроде

UserForm1.Show

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

Dim frm as UserForm1
set frm = new UserForm1
frm.show

Вы можете использовать эту переменную и получить доступ ко всем ее элементам (Me - это не что иное, как ссылка на сам экземпляр, если вы находитесь внутри кода формы).

Так что часть кода в вашей UserForm1 может выглядеть как

Dim frmSettings As SettingsForm    ' Declare a variable for the setting form

Private Sub CommandButton1_Click()
    ' Create a new instance of the setting form
    If frmSettings Is Nothing Then Set frmSettings = New SettingsForm

    ' Do some manipulations and show it
    With frmSettings
        .Caption = "Greetings from " & Me.Name
        .Label1.Caption = "I was set by " & Me.Name
        .TextBox1.Text = "Me too..."
        .Show
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...