最初に_MouseUp
イベントを作成してそれぞれのcoマウスの右ボタンがクリックされたかどうかを確認し、そうであれば.ShowPopup
メソッドを呼び出します。もちろん
この時点で、コマンドバーMyListControlContextMenu
は、次のように私は別のモジュールでメニューを定義し、定義されていませんので、これは
Private Sub MyListControlName_MouseUp(ByVal Button As Integer, _
ByVal Shift As Integer, _
ByVal X As Long, ByVal Y As Long)
' Call the SetUpContextMenu function to ensure it is setup with most current context
' Note: This really only needs to be setup once for this example since nothing is
' changed contextually here, but it could be further expanded to accomplish this
SetUpContextMenu
' See if the right mouse button was clicked
If Button = acRightButton Then
CommandBars("MyListControlContextMenu").ShowPopup
End If
End Sub
を前提としています
Public Sub SetUpContextMenu()
' Note: This requires a reference to Microsoft Office Object Library
Dim combo As CommandBarComboBox
' Since it may have been defined in the past, it should be deleted,
' or if it has not been defined in the past, the error should be ignored
On Error Resume Next
CommandBars("MyListControlContextMenu").Delete
On Error GoTo 0
' Make this menu a popup menu
With CommandBars.Add(Name:="MyListControlContextMenu", Position:=msoBarPopup)
' Provide the user the ability to input text using the msoControlEdit type
Set combo = .Controls.Add(Type:=msoControlEdit)
combo.Caption = "Lookup Text:" ' Add a label the user will see
combo.OnAction = "getText" ' Add the name of a function to call
' Provide the user the ability to click a menu option to execute a function
Set combo = .Controls.Add(Type:=msoControlButton)
combo.BeginGroup = True ' Add a line to separate above group
combo.Caption = "Lookup Details" ' Add label the user will see
combo.OnAction = "LookupDetailsFunction" ' Add the name of a function to call
' Provide the user the ability to click a menu option to execute a function
Set combo = .Controls.Add(Type:=msoControlButton)
combo.Caption = "Delete Record" ' Add a label the user will see
combo.OnAction = "DeleteRecordFunction" ' Add the name of the function to call
End With
End Sub
3つの機能がされているので、これらを次のように定義することができます。
getTextオプションは、コマンドバーメニュー名の名前と、のコントロールキャプションの名前の両方への参照を必要とします。
Public Function getText() As String
getText = CommandBars("MyListControlContextMenu").Controls("Lookup Text:").Text
' You could optionally do something with this text here,
' such as pass it into another function ...
MsgBox "You typed the following text into the menu: " & getText
End Function
LookupDetailsFunction:この例では、私はシェル関数を作成し、テキストを返します "Hello Worldのを!"。
Public Function LookupDetailsFunction() As String
LookupDetailsFunction = "Hello World!"
MsgBox LookupDetailsFunction, vbInformation, "Notice!"
End Function
DeleteRecordFunction:この例では、私はコントロールがnullに対してそれをチェックすることにより、依然として有効であり、さらに有効な場合は、テーブルからレコードを削除するクエリを実行します保証されます。
Public Function DeleteRecordFunction() As String
If Not IsNull(Forms!MyFormName.Controls("MyListControlName").Column(0)) Then
Currentdb.Execute _
"DELETE * FROM [MyTableName] " & _
"WHERE MyKey = " & Forms!MyFormName.Controls("MyListControlName").Column(0) & ";"
MsgBox "Record Deleted", vbInformation, "Notice!"
End If
End Function
注:LookupDetailsFunction
、DeleteRecordFunction
とgetText
機能については、これらが正常に動作するために、公開範囲内でなければなりません。
最後に、最後の手順はメニューをテストすることです。これを行うには、フォームを開いてリストコントロールを右クリックし、ポップアップメニューからオプションの1つを選択します。
任意に、button.FaceID
は、メニューポップアップコントロールの各インスタンスに関連付ける既知のオフィスアイコンを示すために利用することができる。
私はがFaceIDブラウザアドインの作成に非常に役立つことがわかりました。
参考文献: Microsoft FaceID
答えは、Accessのバージョンに大きく依存します。もしA2007、1つの答え、以前のバージョン、完全に異なる答え。 –