2016-12-13 5 views
0

メソッド/サブの実行後にイベントが発生した場合、どのように変数をVBAのイベントに渡すのですか?詳細に実行後にVBAイベントハンドラに変数を渡す

:ここ

'My Sub'''''''''''''''''''''''''' 
Private Sub mySub() 
    structCalculateDateValues 'calculates a number of dates that I want to be unlocked on my form 
    fnCreateTable 'create a table will all dates form my database 
End Sub 

'Event handler for continous form''''''''''''''' 
Private Sub Form_Current() 
    'Some code to get the value of my Struct - structCalculateDateValues 
    'Lock records that do not fall within of the date parameters of the values in structCalculateDateValues 
End Sub 

コンセプトは、私は、フォームが一時テーブル内のすべての日付のレコードを示すが、レコードだけの一部が編集可能にできるようにしたいです。これらの計算

  • 上にある連続フォームをベース一時テーブルにすべての日付の計算を含む構造体を作成し
  • 負荷値を

    1. :これはMS Accessの2013年に行われ、私はそれが設定した方法がありますそのテーブルにバインドされ、既にフォームがそれを開くことは何とかそのハンドラにForm_Currentイベントハンドラ
    2. パス構造体の値をトリガとして
    3. 実行が正常にここ
    4. を終わるだろうが存在する??????

    これは他の何よりも効率の問題です。このイベントがどのように引き起こされるかが大きな疑問です。私はまた、データベースに私の構造体メンバの値を書いている(cop-outになる)答えを避けたい。私はイベントの権利を検出するために実行を一時停止するVBAの方法がなければならないと思いますか?

    おかげで、

  • +0

    私のサブがprivate myStructであるモジュール変数として設定してから、割り当てて使用します。多分 –

    +0

    あなたの構造体の戻り値を持つ関数としてstructCalculateDateValuesを使用します。私がこれを理解するならば、私はイベントハンドラでStructを再計算することを提案しています。これははいをするのは簡単です、私の構造体は、あなたが提案するように設定されたモジュールです。しかし、可能であれば、私はプロセッサに手間を省きたいと思っています。本質的に私は仕事を複製しています(もしあなたがここであなたを理解していれば)。 –

    +0

    トップにprivate構造体がある場合は、それを使用してください。現在は使用できます –

    答えて

    1

    あなたはモジュールレベル変数を必要としています。モジュール内のどこからでもアクセスできます。

    Option Explicit 
    Private MyValue As MyValueType '<--- 
    
    Private Sub Some_ParameterlessEventHandler() 
        MyValue.SomeMember = 42 
    End Sub 
    
    Private Sub SomeProcedureThatRunsAfterTheHandler() 
        Debug.Print MyValue.SomeMember 'outputs 42 
    End Sub 
    
    +0

    グローバルレベルまたはモジュールレベルの変数はガベージコレクションに失われませんか?私は私のメインサブ終了後にVBAを信じて、参照が解放され、すべての変数がガベージコレクションされていますか?また、私は継続的なフォームに関するイベントハンドラを無料で保有していません。それらは、自分のアクセスオブジェクトの中の別のモジュールにあります。 –

    +0

    VBAはガベージコレクションを行いません。参照カウントされ、 'End'キーワードに遭遇するかマクロが炎になるまで"リセット "されません。 –

    +1

    @JamieMarshall note: 'End'は' End Sub'トークンの 'End'部分ではなく、実際の' End'命令を意味します。ホストアプリケーションが生存している限り、あなたは 'End'核でそれらを殺さない限り、モジュール変数は生きています。 –

    関連する問題