【问题标题】:Open Current Record from Right-Click CommandBar Menu从右键单击命令栏菜单打开当前记录
【发布时间】:2012-05-22 20:14:43
【问题描述】:

我正在使用此代码为我的数据表表单 (Access 2007) 创建一个右键单击菜单。此代码在 Open 事件的数据表子表单中运行:

Dim sMenuName As String
sMenuName = "DatasheetRightClickMenu"

On Error Resume Next
CommandBars(sMenuName).Delete
If Err.Number <> 0 Then Err.Clear
On Error GoTo 0

Dim cmb As Office.CommandBar
Dim cmbItem

Set cmb = CommandBars.Add(sMenuName, _
           msoBarPopup, False, False)


Set cmbItem = cmb.Controls.Add(msoControlButton, , , , True)
With cmbItem
    .Caption = "Open"
    .OnAction = "=OpenDetails()"
End With

Me.ShortcutMenu = True
Me.ShortcutMenuBar = sMenuName

我不知道如何将当前记录的 ID 传递给 OpenDetails 函数。如果我能弄清楚如何传递表单或记录集变量/引用,我会很高兴,但我似乎也不知道如何做到这一点。

将“实时”参数或参数从右键菜单传递到自定义函数的技巧是什么?用户点击的时候一定要建立右键菜单吗?或者有更好的方法吗?

编辑1:
以下是我目前所做的工作:

Private Sub Form_Current()
    Call CreateRightClickMenu
End Sub

Private Sub CreateRightClickMenu()
    Dim sMenuName As String
    sMenuName = Me.Name & "RClickMenu"

    On Error Resume Next
    CommandBars(sMenuName).Delete
    If Err.Number <> 0 Then Err.Clear
    On Error GoTo 0

    Dim cmb As Office.CommandBar
    Dim cmbItem

    Set cmb = CommandBars.Add(sMenuName, _
               msoBarPopup, False, False)


    Dim s1() As String, s2 As String
    If Nz(Me.txtitemdesc, "") <> "" Then
        s2 = Me.txtitemdesc & " "
        s2 = Replace(s2, ",", " ")
        s1 = Split(s2, " ")
        s2 = s1(0)
    End If

    Set cmbItem = cmb.Controls.Add(msoControlButton, , , , True)
    With cmbItem
        .Caption = "Open " & Replace(Me.txtitemdesc, "&", "&&")
        .Parameter = Me!ItemID
        .OnAction = "OpenFromDatasheetRightClick"
    End With

    Set cmbItem = cmb.Controls.Add(msoControlButton, , , , True)
    With cmbItem
        .FaceId = 640
        .Caption = "Filter = '" & s2 & "'"
        .Parameter = s2
        .OnAction = "FilterAllItemsDatasheet"
    End With

    If Me.FilterOn = True And Me.Filter <> "" Then
        Set cmbItem = cmb.Controls.Add(msoControlButton, , , , True)
        With cmbItem
            .Caption = "Clear Filter"
            .Parameter = ""
            .OnAction = "FilterAllItemsDatasheet"
        End With
    End If

    Me.ShortcutMenu = True
    Me.ShortcutMenuBar = sMenuName
End Sub

看来我的回调函数必须在公共模块中,而不是表单模块中。

Public Sub FilterAllItemsDatasheet()
    Dim cbar As CommandBarControl
    Set cbar = CommandBars.ActionControl
    If cbar Is Nothing Then
        Debug.Print "CBar is nothing"
        Exit Sub
    End If
    Dim s1
    s1 = cbar.Parameter
    If s1 = "" Then
        Call Forms("frmAllItemsDatasheet").ClearFilter
    Else
        Forms("frmAllItemsDatasheet").cboSearch = s1
        Call Forms("frmAllItemsDatasheet").UpdateSubform
    End If
End Sub


Public Sub OpenFromDatasheetRightClick()
    Dim cbar As CommandBarControl
    Set cbar = CommandBars.ActionControl
    If cbar Is Nothing Then
        Debug.Print "CBar is nothing"
        Exit Sub
    End If
    Dim s1
    s1 = cbar.Parameter
    Call OpenItemDetailForm(s1)
    Forms("frmAllItemsDatasheet").SetFocus
End Sub

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    怎么样:

    Set cmbItem = cmb.Controls.Add(msoControlButton, , , , True)
    With cmbItem
        .Caption = "Open"
        .OnAction = "=OpenDetails([ID])"
    End With
    
    ''Function
    Function OpenDetails(intID)
        MsgBox intID
        ''This would also work
        MsgBox Screen.ActiveForm.ID
    End Function
    

    测试时不要忘记关闭并重新打开表单:)

    【讨论】:

    • 我收到一个错误:该对象不包含自动化对象“ID”。我尝试了几个不同的领域,他们都遇到了同样的问题。
    • 我使用上面的代码、数据表表单和 Open 事件进行了测试。我使用 2010,但它与 2007 的菜单几乎相同。我想知道是否值得尝试使用临时数据库和新表单?当您在同一表单上工作了一段时间并且它已经损坏时,有时会发生该错误。 Screen.Activeform.[somesuitablefield] 会返回任何东西吗?
    • 你把你的 OpenDetails 函数放在哪里了?表单模块还是代码模块?
    • 我没有测试 Screen.ActiveForm 的东西。我认为这是最后的手段,因为在我看来这可能是不可预测的。您能推荐它作为一种稳定、可预测的使用方法吗?
    • Alber Kallal 使用 Screen.ActiveForm : stackoverflow.com/questions/1462876/…
    猜你喜欢
    • 2019-10-14
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    相关资源
    最近更新 更多