如何使用vba在userform中声明自定义事件

如何使用vba在userform中声明自定义事件,vba,ms-word,Vba,Ms Word,我有一个userform,它收集一些用户输入。现在我要做的是声明一些事件,当单击OK按钮时从userform抛出。我是vba新手,所以我不知道怎么做。任何代码或教程链接将不胜感激 Load UserForm1 UserForm1.Show //here I want to capture UserForm1 OK button's click event and read the data 正如我在评论中所说,我不认为你想做的是可能的,但我想到了以下解决办法: 如果用户输入非常简单,比如只输入

我有一个userform,它收集一些用户输入。现在我要做的是声明一些事件,当单击OK按钮时从userform抛出。我是vba新手,所以我不知道怎么做。任何代码或教程链接将不胜感激

Load UserForm1
UserForm1.Show
//here I want to capture UserForm1 OK button's click event and read the data

正如我在评论中所说,我不认为你想做的是可能的,但我想到了以下解决办法:

  • 如果用户输入非常简单,比如只输入字符串,则messagbox可以工作:

    Dim sUserInput As Variant
    
    sUserInput = InputBox("Please enter something useful.", "Title", "Default")
    
    Debug.Print "sUserInput=" & sUserInput
    
  • 如果您需要表单来捕获用户输入,将其设置为模态,然后通过公共方法公开值可能会奏效

    形式如下:

    Option Explicit
    
    Private msFormString As String
    
    Private Sub CommandButton1_Click()
        msFormString = "Someone clicked on Button 1!"
    
        '***** Note: if you use Unload Me, the string
        '***** is unloaded with the form...
        Me.Hide
    End Sub
    
    Public Function GetFormString() As String
        GetFormString = msFormString
    End Function
    
    呼叫代码:

    Load UserForm1
    Call UserForm1.Show(vbModal)
    Debug.Print "Value from UserForm1: " & UserForm1.GetFormString
    
    注意:如果需要返回更多数据,函数可以返回对象、类或数组


  • 正如我在评论中所说,我不认为你想做的是可能的,但我想到了以下解决办法:

  • 如果用户输入非常简单,比如只输入字符串,则messagbox可以工作:

    Dim sUserInput As Variant
    
    sUserInput = InputBox("Please enter something useful.", "Title", "Default")
    
    Debug.Print "sUserInput=" & sUserInput
    
  • 如果您需要表单来捕获用户输入,将其设置为模态,然后通过公共方法公开值可能会奏效

    形式如下:

    Option Explicit
    
    Private msFormString As String
    
    Private Sub CommandButton1_Click()
        msFormString = "Someone clicked on Button 1!"
    
        '***** Note: if you use Unload Me, the string
        '***** is unloaded with the form...
        Me.Hide
    End Sub
    
    Public Function GetFormString() As String
        GetFormString = msFormString
    End Function
    
    呼叫代码:

    Load UserForm1
    Call UserForm1.Show(vbModal)
    Debug.Print "Value from UserForm1: " & UserForm1.GetFormString
    
    注意:如果需要返回更多数据,函数可以返回对象、类或数组

    • 在子窗体中声明事件并在特定时刻引发它:
    Public事件clickOnChild(ByVal inputText作为字符串)

    RaiseEvent单击儿童(Me.TextBox1.Value)

    • 在自定义类模块、工作表类模块或其他用户窗体中,可以捕获事件。但是,您无法在标准模块中捕获事件,因为WithEvents变量仅在对象模块中有效。要捕获其他用户窗体中的事件,请声明类型为childUserForm和的WithEvents变量 添加将捕获和处理事件的事件处理程序:
    Private带有事件的childForm作为childUserForm

    Private Sub子窗体\u clickOnChild(ByVal inputText作为字符串)


    完整示例:

    子用户表单:

    父用户窗体:

    • 在子窗体中声明事件并在特定时刻引发它:
    Public事件clickOnChild(ByVal inputText作为字符串)

    RaiseEvent单击儿童(Me.TextBox1.Value)

    • 在自定义类模块、工作表类模块或其他用户窗体中,可以捕获事件。但是,您无法在标准模块中捕获事件,因为WithEvents变量仅在对象模块中有效。要捕获其他用户窗体中的事件,请声明类型为childUserForm和的WithEvents变量 添加将捕获和处理事件的事件处理程序:
    Private带有事件的childForm作为childUserForm

    Private Sub子窗体\u clickOnChild(ByVal inputText作为字符串)


    完整示例:

    子用户表单:

    父用户窗体:


    来自谷歌:这不是我想要的。我有一个userform,我想在userform之外捕获它的命令按钮的点击事件。我认为这是不可能的,但是你可以在表单代码中捕获事件,然后在表单之外的模块中调用子或函数。来自Google:这不是我要找的。我有一个userform,我想在userform之外捕获它的命令按钮的click事件。我认为这是不可能的,但是你可以在表单代码中捕获事件,然后在表单之外的模块中调用一个子模块或函数。