vba:userform函数

时间:2011-07-01 13:31:45

标签: vba userform

我有一个从用户窗体上的按钮激活的子。点击的基本步骤是

1)根据用户输入运行我的子

2)选择结果表

3)显示我的结果

4)卸载我的用户表单

我遇到了一个问题,因为我想尝试在用户输入值上设置边界,如果用户输入超出范围的内容,则会弹出一个消息框,通知他们该范围。通过使用if / then循环,我已经能够完成这个简单的任务。用户退出消息框后,我希望保持用户形式与原始用户输入一起显示,并允许用户更改其输入。但是目前用户在消息框上单击“确定”后,我的click sub继续其过程并卸载我的userform并选择我的结果工作表。是否有一个简单的一行代码,我可以在我的msgbox状态之后保存userform而不是让用户重新输入它们的值?

编辑 - 我的代码的一般要点如下:

Private Sub CommandButton1_Click()
    PropertySearch.Search
    ActiveSheet.Name = "SearchResult"
    Cells(1, 1).Select
    Unload ILsearch
End Sub

Sub Search()
    If (TextBox1 And TextBox2 <= 8) And (TextBox1 And TextBox2 > 0) Then
    '
    'Performs my desired function
    '
    Else: MsgBox ("Database only includes ionic liquids with a maximum of 8 carbons in cation")
    End If

2 个答案:

答案 0 :(得分:1)

如果输入在边界内,我会将Search转换为返回true或false的函数:

Function Search() AS Boolean

   If (TextBox1 And TextBox2 <= 8) And (TextBox1 And TextBox2 > 0) Then
      Search = True
   Else
      Search = False
   EndIf

End Function

然后如果输入不符合你的界限你就退出sub:

Private Sub CommandButton1_Click()

    If(Not PropertySearch.Search) Then
       MsgBox("your error message here")
       Exit Sub
    EndIf

    ' rest of the routine

End Sub

答案 1 :(得分:0)

有大约一千一种解决方法-问题是您希望表格具有什么行为?

您是否希望它在一定时间后自动关闭? 查看计时器1

的示例

或者查看Application.Ontime

Application.OnTime Now + TimeValue("00:00:10"), "unloadForm"

其中“ unloadForm”是常规模块中的子项

Sub unloadForm()
    Unload ILsearch
End Sub

您要添加关闭表单按钮吗?

Private Sub CommandButton1_Click ()
    Unload Me
End Sub

您是否要用户手动关闭表单,并在顶部角落显示红色X?只需使用Unload

删除该行

您是否要显示一个模式弹出窗口,该窗口将Excel冻结直到关闭然后再卸载表单?在卸载表单之前,请尝试添加MsgBox "Hello"

还有很多很多!

例如,我有几种使用键盘事件的形式。 Escape可以清除所有字段并隐藏/卸载表单,而Enter可以执行相同的操作,但也可以将值写入表中; Delete只能清除活动控件,而不会隐藏表单,上下箭头会循环显示当前表单并显示左右功能,例如Tab / Shift + Tab。