excel vba、用户窗体和事件:可以接受事件的无模式用户窗体

excel vba、用户窗体和事件:可以接受事件的无模式用户窗体,excel,automation,excel-2010,userform,vba,Excel,Automation,Excel 2010,Userform,Vba,我的Excel手册包含一个名为myUserForm的用户表单。 我想打开它,用数据填充它,然后按它的按钮。 我在其中输入数据的文本框具有BeforeUpdate和AfterUpdate处理程序 如果我调用call UserForm2.Show,这些事件将运行,但我似乎无法卸载表单(调用call UserForm2.Show会暂停excel marco的执行,直到我手动关闭它) 如果我调用don'tcall UserForm2.Show(或在无模式模式下调用),数据填充是可以的,但Excel Be

我的Excel手册包含一个名为
myUserForm
的用户表单。 我想打开它,用数据填充它,然后按它的按钮。 我在其中输入数据的文本框具有BeforeUpdate和AfterUpdate处理程序

如果我调用
call UserForm2.Show
,这些事件将运行,但我似乎无法卸载表单(调用
call UserForm2.Show
会暂停excel marco的执行,直到我手动关闭它)

如果我调用don't
call UserForm2.Show
(或在无模式模式下调用),数据填充是可以的,但Excel BeforeUpdate和AfterUpdate处理程序将被忽略

示例代码:

在模块中:

Public Function s(ByVal newValue As String) As String
    'Call UserForm2.Show
    UserForm2.TextBox1.Value = newValue
    UserForm2.Repaint
    s = UserForm2.TextBox1.Value
    UserForm2.Button1_Click
End Function


Public Function s2() As String
    s2 = s("newValue")
End Function
以用户形式:

Public Sub Button1_Click()
    Unload Me
End Sub

Public Sub TextBox1_AfterUpdate()
    TextBox1.Value = TextBox1.Value + "y"
End Sub

您想打开一个表单,用数据填充表单,然后在没有用户交互的情况下关闭表单吗?为什么还要麻烦打开表单呢

除此之外,只需将卸载代码移到表单加载事件或表单activat事件的末尾。。。虽然这可能不起作用,但值得一试,很抱歉不能在PC上测试