在VBA中重置表单

met*_*lah 7 vba

我有一个VBA表单,有多种选择选项,包括下拉菜单,文本字段,复选框和无线电.

我只是想知道用按钮按下清除所有这些字段的最佳方法.我的一个朋友试图通过电子邮件向我发送下面的代码来帮助,但遗憾的是它不起作用,我检查了变量名称.

关于如何改进它的任何建议?

提前致谢.

Private Sub btnReset_Click()

Unload Me
UserForm.Show

End Sub
Run Code Online (Sandbox Code Playgroud)

这是userform的其他代码.

Dim DeptCode 'Holds department code

Private Sub UserForm_Initialize()

    Dim c_deptCode As Range
    Dim c_deptName As Range
    Dim deptCodes As Variant
    Dim deptNames As Variant

    Dim ws_dept As Worksheet
    Set ws_dept = Worksheets("lookupDept")

    ' Assign each range to an array containing the values
    deptCodes = Choose(1, ws_dept.Range("deptCode"))
    deptNames = Choose(1, ws_dept.Range("deptName"))

    For i = 1 To ws_dept.Range("deptCode").Rows.Count
        ' Create the combined name (code + space + name)
        CombinedName = deptCodes(i, 1) & " - " & deptNames(i, 1)
        cbo_deptCode.AddItem CombinedName
    Next i

End Sub
Run Code Online (Sandbox Code Playgroud)

Dic*_*ika 17

我认为当它遇到卸载我的行时,代码执行停止,这就是为什么它不适合你.这是一个重置表单上所有(大多数)控件的通用事件过程.

Private Sub cmdReset_Click()

    Dim ctl As MSForms.Control

    For Each ctl In Me.Controls
        Select Case TypeName(ctl)
            Case "TextBox"
                ctl.Text = ""
            Case "CheckBox", "OptionButton", "ToggleButton"
                ctl.Value = False
            Case "ComboBox", "ListBox"
                ctl.ListIndex = -1
        End Select
    Next ctl

End Sub
Run Code Online (Sandbox Code Playgroud)

它不会重新填充ComboBoxes和ListBox,只是清除选择,这是我想你想要的.


Joh*_*ied 5

我知道这个问题差不多是2年了但我正在寻找这样的答案.但是,我正在使用Access 2010并发现该功能不能完全按预期工作:

  • ctl可以简化为控件
  • 对于文本框,只有控件具有焦点时才能分配ctl.Text属性(改为使用ctl.Value)
  • 如果OptionButton是OptionGroup的一部分,则无法为其分配值

所以考虑到这些问题,这是我的重写函数:

Private Sub resetForm()

    Dim ctl As Control ' Removed MSForms.

    For Each ctl In Me.Controls
        Select Case TypeName(ctl)
            Case "TextBox"
                ctl.value = ""
            Case "CheckBox", "ToggleButton" ' Removed OptionButton
                ctl.value = False
            Case "OptionGroup" ' Add OptionGroup
                ctl = Null
            Case "OptionButton" ' Add OptionButton
                ' Do not reset an optionbutton if it is part of an OptionGroup
                If TypeName(ctl.Parent) <> "OptionGroup" Then ctl.value = False
            Case "ComboBox", "ListBox"
                ctl.ListIndex = -1
        End Select
    Next ctl

End Sub
Run Code Online (Sandbox Code Playgroud)