将代码放入VBA Userform而不是"普通"模块中是否有缺点?
这可能是一个简单的问题,但我在搜索Web和stackoverflow时没有找到一个确定的答案.
背景:我正在Excel-VBA中开发数据库的前端应用程序.要选择不同的过滤器,我有不同的用户形式.我问一般的程序设计更好:(1)将控制结构放入单独的模块中或(2)将下一个用户形式或操作的代码放入用户窗体中.
让我们举个例子.我有一个Active-X按钮,可以触发我的过滤器和表单.
Variant1:模块
在CommandButton中:
Private Sub CommandButton1_Click()
call UserInterfaceControlModule
End Sub
Run Code Online (Sandbox Code Playgroud)
在模块中:
Sub UserInterfaceControllModule()
Dim decisionInput1 As Boolean
Dim decisionInput2 As Boolean
UserForm1.Show
decisionInput1 = UserForm1.decision
If decisionInput1 Then
UserForm2.Show
Else
UserForm3.Show
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
在变体1中,控制结构在正常模块中.关于下一个要显示哪个userform的决定与userform分开.决定下一个要显示的用户表单所需的任何信息都必须从用户表单中提取.
Variant2:Userform
在CommadButton中:
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
Run Code Online (Sandbox Code Playgroud)
在Userform1中:
Private Sub ToUserform2_Click()
UserForm2.Show
UserForm1.Hide
End Sub
Private Sub UserForm_Click()
UserForm2.Show
UserForm1.Hide
End Sub
Run Code Online (Sandbox Code Playgroud)
在变体2中,控制结构直接在用户表单中,每个用户表单都有关于它后面的内容的说明.
我已经开始使用方法2进行开发.如果这是一个错误,并且这个方法有一些严重的缺点,我想早点知道它.
我在表单上有以下按钮:
Private Sub CommandButton1_Click()
Dim pass As String
pass = UserForm1.TextBox1
Unload UserForm1
End Sub
Run Code Online (Sandbox Code Playgroud)
然后我有一个名为Module1的模块:
Public Sub Login()
...
UserForm1.Show
driver.findElementByName("PASSWORD").SendKeys pass
...
End Sub
Run Code Online (Sandbox Code Playgroud)
这个想法是用户输入到输入框的任何密码都将被分配给变量pass.然而,我遇到的麻烦是pass从UserForm1 传递到Module1的Login子.
我想Module1.Login (pass)在卸载它之前添加类似于我的表单的东西会起作用,但是这似乎没有通过任何东西.任何帮助将非常感激.谢谢.
您好,我在我的Userform中尝试此代码,以检查输入的数据textbox1是否是一个数字,如果没有显示msgbox给用户并选择文本textbox1,但下面的代码不会选择文本textbox1时Userform是vBModeless
Private Sub TextBox1_Change()
If Not IsNumeric(TextBox1) Then
MsgBox " only number"
TextBox1.SetFocus
TextBox1.SelStart = 0
TextBox1.SelLength = Len(TextBox1.Text)
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
有什么办法吗?
我想使用无格式的用户表单,以便用户可以在回答用户表单上的问题之前浏览 Excel 表。我需要暂停或循环代码,直到用户窗体关闭(隐藏或卸载)。
与此类似的问题: 当表单关闭并设置为 vbModeless 时,如何等待特定代码运行? 但这里的解决方案不适用于我的应用程序;我的用户窗体在一个长子程序的中间打开,该子程序需要在用户窗体关闭后完成执行。
Dim popupActive as Boolean
popupActive = True
StartingSINT_Popup.Show vbModeless 'Open userform
'have VBA code wait until userform is closed
wait until popupActive = False 'set to false with OK button on userform
'continue code with info input inside StartingSINT_Popup userform
Run Code Online (Sandbox Code Playgroud)