1

I have userform which collects some user input. Now what I'm trying to do, is to declare some event to throw from userform when OK button is clicked. I'm new to vba so I don't know how to do it. Any code or link to tutorial would be greatly appreciated.

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

2 に答える 2

7
  • 子フォームでイベントを宣言し、特定の瞬間に発生させます。

Public Event clickOnChild(ByVal inputText As String)

RaiseEvent clickOnChild(Me.TextBox1.Value)

  • カスタム クラス モジュール、ワークシート クラス モジュール、またはその他のユーザー フォームで、イベントをキャッチできます。ただし、WithEvents 変数はオブジェクト モジュールでのみ有効であるため、標準モジュールでイベントをキャッチすることはできません。たとえば、他のユーザー フォームでイベントをキャッチするには、childUserForm 型の WithEvents 変数を宣言し、イベントがキャッチされて処理されるイベント ハンドラを追加します。

Private WithEvents childForm As childUserForm

Private Sub childForm_clickOnChild (ByVal inputText As String)


完全な例:

子ユーザー フォーム:

Option Explicit

Public Event clickOnChild(ByVal inputText As String)

Private Sub CommandButton1_Click()
  RaiseEvent clickOnChild(Me.TextBox1.Value)
End Sub

親ユーザー フォーム:

Option Explicit

Private WithEvents childForm As childUserForm

Private Sub CommandButton1_Click()
  childForm.Show
End Sub

Private Sub childForm_clickOnChild(ByVal inputText As String)
  MsgBox "Input in child form was: " & inputText
End Sub

Private Sub UserForm_Initialize()
  Set childForm = New childUserForm
End Sub
于 2012-10-22T12:17:50.700 に答える
0

コメントで言ったように、あなたがやりたいことは可能だとは思いませんが、次の回避策を考えました:

  1. 文字列を入力するだけのように、ユーザー入力が非常に単純な場合は、メッセージボックスが機能する可能性があります。

    Dim sUserInput As Variant
    
    sUserInput = InputBox("Please enter something useful.", "Title", "Default")
    
    Debug.Print "sUserInput=" & sUserInput
    
  2. フォームでユーザー入力をキャプチャする必要がある場合は、フォームをモーダルにしてから、パブリック メソッドを介して値を公開するとうまくいく可能性があります。

    形式:

    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
    

    注: さらにデータを返す必要がある場合、関数はオブジェクト、クラス、または配列を返すことができます。

于 2012-10-22T11:41:34.363 に答える