2017-03-13 3 views
0

コンボボックスからフォームを選択し、その選択に基づいて、関連付けられたuserformを開き、新しく開いたユーザーフォームのtextbox1のtextbox1にテキストを入力しようとしています。私は選択されたケースを試して、その場合は運がないと言う。助けてくださいthen then文がコンボボックスと開いているユーザーフォームを評価する

Private Sub PrintSheet_Click() 
Dim calltype As Variant 
calltype = ComboBox1.Value 

If calltype = "fire" Then 
    NewRunUserForm.Show 
    PrintUserForm.TextBox1.Value = NewRunUserForm.TextBox1.Value 
    ElseIf calltype = "accident" Then 
    AccidentUserForm.Show 
    PrintUserForm.TextBox1.Value = AccidentUserForm.TextBox1.Value 

    ElseIf calltype = "training" Then 
    TrainingUserForm.Show 
    PrintUserForm.TextBox1.Value = TrainingUserForm.TextBox1.Value 

    ElseIf calltype = "meeting" Then 
    MeetingUserForm.Show 
    PrintUserForm.TextBox1.Value = MeetingUserForm.TextBox1.Value 


End If 

End Sub 

私はまた、どちらも動作していないように見える長さを変更しようとしました。 コマンドボタンをクリックすると、何も起こりません。上記は私が最近試みたコードです。私はcomboxの選択に関連付けられたuserformを.showにしたいと思っています。

+1

デバッグヘルプ(「なぜこのコードは機能していませんか?」)には、目的の動作、特定の問題またはエラー、および質問自体に再現するのに必要な最短コードが含まれている必要があります。明確な問題文がない質問は、他の読者にとって有用ではありません。 [mcve] –

+0

を参照してください。 –

+0

*コマンドボタンをクリックすると、何も起こりません* - ハンドラがまったく実行されません。 'calltype = ComboBox1.Value'命令にブレークポイントを設定して、その値があなたが想定していると仮定しているかどうかを確認しましたか? –

答えて

0

下記のコードを試してください。コンボボックスで選択した値が何であるかを少なくとも伝えます。また、Ifの条件を確認しながら小文字に変換します。

Private Sub PrintSheet_Click() 
    Dim calltype As Variant 
    calltype = ComboBox1.Value 

    MsgBox "Value in ComboBox1: [" & CStr(calltype) & "]" 'remove this statement it later 
    If LCase$(calltype) = "fire" Then 
    NewRunUserForm.Show 
    PrintUserForm.TextBox1.Value = NewRunUserForm.TextBox1.Value 
    ElseIf LCase$(calltype) = "accident" Then 
    AccidentUserForm.Show 
    PrintUserForm.TextBox1.Value = AccidentUserForm.TextBox1.Value 

    ElseIf LCase$(calltype) = "training" Then 
    TrainingUserForm.Show 
    PrintUserForm.TextBox1.Value = TrainingUserForm.TextBox1.Value 

    ElseIf LCase$(calltype) = "meeting" Then 
    MeetingUserForm.Show 
    PrintUserForm.TextBox1.Value = MeetingUserForm.TextBox1.Value 
    End If 

End Sub 
0

基本的に、オープンフォームは「Me」です。あなたのComboboxはMe.ComboBox1になりますが、Meの指定は現在のフォームで省略することができます。これで別のフォームオブジェクトを作成する必要があります。あなたのコードでは、これらのフォームに名前を付けましたが、宣言しませんでした。下のコードでは、これらのフォームに短い名前を付けて宣言しました。

ます。Private Sub PrintSheet_Click()

のUserFormオブジェクト "サブフォーム"

Dim calltype As String 
Dim SubForm As Object 

calltype = ComboBox1.Value 

Select Case calltype 
    Case "accident" 
     Set SubForm = New FrmAccident 
    Case "fire" 
     Set SubForm = New FrmFire 
    Case "meeting" 
    Case "training" 
End Select 

With SubForm 
    .TextBox1.Value = Me.TextBox1.Value 
    .Show 
End With 

End Subのは、遅延バインディングのためのオブジェクトとして宣言されています。次に、コンボボックスでの選択に応じて、既存のフォームの1つがSubFormオブジェクトに割り当てられます。 最後に、サブフォームのTextbox1(いずれかのサブフォーム)に現在のフォーム(「Me」)からTextbox1の値が割り当てられ、サブフォームが表示されます。その時点でMe.Hideのようなコードを追加すると、サブフォームが開いている間にMeフォームが一時的に消えてしまい、サブフォームの処理が完了したら再び表示されます。

関連する問題