0

MS Accessフォームには、機能するポップアップメニューがありますが、別の方法で設定する方法がわかりません。

ポップアップメニューの定義:

With CommandBars.Add("TreeNodeActions", msoBarPopup, False)
    With .Controls.Add(msoControlButton)
        .caption = "Copy"
        .OnAction = "=CopyNode()"
    End With
End With

質問1:等号と空のパラメータリストが必要なのはなぜですか(それらがないと機能しません)?.OnAction = "copyNode"このフォーラムの他のスレッドで提案されているように、なぜだけではないのですか?

質問2:サブルーチンを実行したいのですが、それを実行する唯一の方法は、サブルーチンを呼び出す関数を呼び出すことです。以下を参照してください。サブルーチンを直接呼び出すにはどうすればよいですか?

Private Function CopyNode()
    Call CopyBid
End Function

Private Sub CopyBid()
    Dim nodx As node

    Set nodx = Me.TreeView1.Nodes(Me.nodeKeySelected.Value)
    Me.BidIdToBeCopied = nodx.Tag
End Sub

質問3:ポップアップメニューはツリービューコントロール上にあります。選択したノードをサブルーチンに渡したいので、ノードキーをフォームに保存して(ツリービューのマウスクリックで)、上記のサブルーチンで使用する必要はありません。下記が欲しいのですが。コマンドバーで定義されたメニュー項目は、パスパラメータをどのように制御できますか?

Private Sub CopyBid(nodx As node)
    Me.BidIdToBeCopied = nodx.Tag
End Sub
4

1 に答える 1

0

さらに自分自身を研究しました。決定的なものではありませんが、私はこれまでのところ得ました:
Q1:ドキュメントが見つかりません、ms-accessvbaonActionプロパティの構文がそのようなものであるというのは事実です。これについての説明が見つからないのはまだ少し奇妙に感じます-「等号は次の関数またはプロシージャが呼び出されることを確認します。最後の括弧は冗長ですが、パラメータなしの場合は追加する必要があります関数」
Q2:これはできないようです。したがって、これを関数に変更しない限り、既存のサブを再利用することはできません。奇妙ですが、おそらく再び人生の事実です。これにもドキュメントはありません。
Q3:パラメーターの受け渡しは、見た目ほど簡単ではありません。必須の括弧は、パラメーターを持つ関数のonAction仕様に変数を指定するだけの問題であることを示しています。これはそれほど単純ではありません。おそらく、onAction仕様は、パラメーターを考慮せずに既知の関数名の検索をトリガーする文字列であるためです。私が見つけたパラメーターを提供する1つの方法(最後にいくつかの有用な情報!)は、関数を呼び出し、.onactionを使用して引数を渡すことで見つけることができます。私には汚い回避策のように感じるので、私はまだより良い解決策が利用可能かどうか疑問に思います。そして、私はまだこの「解決策」をテストしていません...

于 2012-03-07T08:02:57.970 に答える