我有一个VBA表单,其中包含各种选项,包括下拉菜单,文本字段,复选框和收音机。
我只是想知道用按钮按下清除所有这些字段的最佳方法。我的一个朋友试图通过电子邮件向我发送下面的代码来帮助,但遗憾的是它不起作用,我检查了变量名称。
关于如何改进它的任何建议?
提前致谢。
Private Sub btnReset_Click()
Unload Me
UserForm.Show
End Sub
以下是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
答案 0 :(得分:17)
我认为当它点击Unload Me行时,代码执行会停止,这就是为什么它不适合你。这是一个重置表单上所有(大多数)控件的通用事件过程。
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
它不会重新填充ComboBoxes和ListBoxes,只是清除选择,这是我想你想要的。
答案 1 :(得分:5)
我知道这个问题差不多是2年了但我正在寻找这样的答案。但是,我正在使用Access 2010,并发现该功能并未完全按预期工作:
因此,考虑到这些问题,这是我的重写功能:
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
答案 2 :(得分:1)
你可以试试这个:
Private Sub btnReset_Click()
Call UserForm_Initialize
End Sub
答案 3 :(得分:1)
对于最新版本的Access,Microsoft现在已经很好地记录了这一点。看起来上面的一些答案涉及旧版本。下面的代码完全适用于我的应用程序。我只包含了我需要的控件类型,但您可以在下面的Microsoft链接中找到其他任何文档。
Dim ctl As Control
For Each ctl In Me.Controls
With ctl
Select Case .ControlType
Case acTextBox
.Value = ""
Case acCheckBox
.Value = False
Case acComboBox
.SetFocus
.SelText = ""
Case acListBox
.Value = Null
End Select
End With
Next ctl
请注意,对于组合框,您必须在设置值之前将焦点设置在那里。 参考:https://msdn.microsoft.com/en-us/vba/access-vba/articles/combobox-seltext-property-access
答案 4 :(得分:1)
添加到最新答案 - 如果某些控件具有默认值,则可以使用
ctl.Value = ctl.DefaultValue
哪个适用于我,至少对于复选框和组合框。