2017-03-07 7 views
1

バインドされたコンボボックス(つまり、cboTest)を持つ2つのフォーム(つまりfrmTest)があります。私は、これらのフォーム(つまり、btnTest_Click)のボタンクリックサブを呼び出すpublicサブによってNotInListイベントを解決しようとしています。モジュールからのプライベートサブ呼び出し、連結参照

フォームfrmTestを:

Private Sub cboTest_NotInList(NewData As String, Response As Integer) 
    Response = acDataErrContinue 
    Item_NotInList NewData, Me, "btnTest" 
End Sub 

Public Sub btnTest_Click 
    '.... 
End sub 

モジュール:

Public strNotInList_Text As String 
'public variable to store entered text 

Public Sub Item_NotInList (strNewData As string, frmForm As Form, strControl As String) 
    Dim strControl_Sub As String 
    strNotInList_Text = strNewData 
    strControl_Sub = "." & strControl & "_Click" 
    Application.Run frmForm.Name & strControl_Sub 
End Sub 

Accesのは、 "手順frmTest.btnTest_Clickが見つかりませんでした...プログラム。" というエラーを返します。

なぜですか?

参照frmTest.btnTest_Clickが正しいように見えます。サブbtnTest_Clickはパブリックとして宣言されています。

ありがとうございました。

+0

フォーム内に 'btnTest_Click'を格納しないで、モジュール(' btnTestClick')に保存し、 'Sub btnTest_Click()\\ btnTestClick \\ End Sub'を使ってテストボタンから呼び出してください。 – Wolfie

+0

ありがとうございました。しかし、btn ... _さまざまなフォームのClick Subは、さまざまな手順を処理しています。だからこそ私はbtnを使っています... _フォームのsubsをクリックします。 – Duski

+0

実行するだけでは実行できません。フォームを格納したパブリックオブジェクト変数を使用して、そのメソッドを直接呼び出すか、ルーチンをPublicにして、それを呼び出すために 'CallByName'を使用することができます。私はこの設定に何かメリットがあるとは言えません。 – Rory

答えて

0

このメソッドでIMyInterfaceと言うと、btnTest_Click(異なる名前を付けてください)という名前のインターフェイスを作成して、このメソッドを呼び出すフォームにこのインターフェイスを実装させることはできませんでしたか?フォームのインスタンスは、あなたは、単にターゲットメソッドを呼び出しItem_NotInList方法で提供されていますので

Public Sub Item_NotInList (strNewData As string, frmForm As IMyInterface, strControl As String) 
' ... 
frmForm.btnTest_Click 
' ... 

:次に、このようなItem_NotInListの署名を変更します。これは役に立ちますか?


例:

は、クラスモジュールを追加し、例えば、それに名前を付けますIMyInterface(必要に応じて名前を付けられます)。メソッドの空の本体を追加します(実装を追加しないでください)。

IMyInterfaceという

Public Sub TestClick() 
    ' will be implemented in your forms 
End Sub 

は、その後、例えば、あなたの形で、このインタフェースを実装しますフォームfrmTestおよびItem_NotInListメソッドで使用する必要があるその他。

フォームfrmTestを例

Implements IMyInterface 

Private Sub IMyInterface_TestClick() 
    ' here goes your implementation 
End Sub 

標準モジュールテストコード

Sub test() 
    Dim f1 As UserForm1 
    Set f1 = New UserForm1 

    Item_NotInList f1 

    Dim f2 As UserForm2 
    Set f2 = New UserForm2 

    Item_NotInList f2 
End Sub 

Sub Item_NotInList(testForm As IMyInterface) 
    testForm.TestClick 
End Sub 

厥こと。 HTh

+0

あなたの返事をありがとう、私は恐れている、あなたの解決策は私にとっては複雑すぎる。私は、インターフェイスの下であなたが意味することを理解していません。私はVBAであまり進んでいません。 – Duski

+0

編集例のコードを参考にしてください。 HTH – dee

関連する問題