如何在单独的用户窗体中操作控件?

时间:2019-06-28 12:15:27

标签: excel vba forms controls

我有两种形式:一种是创造性地命名为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 个答案:

答案 0 :(得分:1)

用户表单是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