如何将UserForm中的用户密码变量传递至Module模块?
登录UserForm与模块变量同步实现
需求
制作了一个登录UserForm,需要让Module1中的User和Pass变量与UserForm内UserBox.Text、PassBox.Text的内容保持一致。
现有代码
UserForm1代码
Public tempUser As String Public tempPass As String Private Sub Submit_Click() tempUser = UserBox.Text tempPass = PassBox.Text Unload Me End Sub Private Sub Back_Click() tempLogin = "" tempSenha = "" Unload Me End Sub Private Sub UserBox_Change() End Sub Private Sub UserForm_Activate() HideTitleBarAndBordar Me MakeUserformTransparent Me End Sub
Module1代码
Sub LogModule() UserForm1.Show User = UserForm1.tempUser Pass = UserForm1.tempPass End Sub
修正与优化方案
修正UserForm1的Back_Click事件变量名错误
原代码里tempLogin和tempSenha是未定义的变量,改为与公共变量一致的名称:Private Sub Back_Click() tempUser = "" tempPass = "" Unload Me End Sub规范Module1的变量声明
原代码中User和Pass未声明,会自动变为全局变体变量,建议显式声明并强制模态显示表单:Sub LogModule() Dim User As String, Pass As String UserForm1.Show vbModal ' 确保表单关闭后再获取变量值 User = UserForm1.tempUser Pass = UserForm1.tempPass ' 此处可添加登录验证等后续逻辑 End Sub优化表单关闭方式(可选)
直接用Unload Me会销毁表单实例,若需复用表单状态,改用Me.Hide隐藏表单,在Module1完成逻辑后再卸载:- UserForm1修改:
Private Sub Submit_Click() tempUser = UserBox.Text tempPass = PassBox.Text Me.Hide ' 替换Unload Me End Sub Private Sub Back_Click() tempUser = "" tempPass = "" Me.Hide End Sub - Module1修改:
Sub LogModule() Dim User As String, Pass As String Dim loginForm As UserForm1 Set loginForm = New UserForm1 loginForm.Show vbModal User = loginForm.tempUser Pass = loginForm.tempPass Unload loginForm Set loginForm = Nothing End Sub
- UserForm1修改:
内容的提问来源于stack exchange,提问作者Ropelato
相关产品推荐
相关产品推荐

