首页 > 解决方案 > 我的快捷键不允许我运行消息框

问题描述

此代码的早期版本没有消息框,这有时会导致错误的工作簿被关闭。我添加了一个 okcancel 消息框来防止这种情况发生,但是当我使用快捷键打开它时,该消息框没有显示出来。我错过了什么?

Sub openerQuick()

    Dim myfile As String
    Dim clientID As String
    Dim PDSfilename As String
    Dim myopener As Variant

    clientID = ActiveCell
    PDSfilename = ActiveCell.Offset(0, 1)
    myfile = "N:\DOWNLOAD\FILEDIR\" & clientID & "\original\" & PDSfilename
    Set wbOpener = Workbooks.Open(myfile)

    If MsgBox("Okay to close?", vbOKCancel) = vbOK Then
        ActiveWorkbook.Close
    End If

End Sub

标签: vbaexcel

解决方案


我怀疑它MsgBox本身与丢失宏快捷键有什么关系。

快捷键是由一个隐藏的成员属性值定义的,当你重写一个方法的签名,或者重写一个模块时,VBE 有丢失成员属性的趋势*;修改代码可能会导致先前存在的属性以某种方式丢失。

  • 从项目中删除模块,在提示是否导出时选择“是”
  • 在您最喜欢的文本编辑器中使用Notepad++ 打开导出的文件
  • 找到程序
  • 如果属性不存在,请添加
  • 如果文件被更改,请保存文件,重新导入到项目中

成员属性应如下所示:

Public Sub OpenerQuick()
    Attribute OpenerQuick.VB_ProcData.VB_Invoke_Func = "A\n14"
    '...code....
End Sub

该确切属性将Ctrl++ShiftA宏相关联;更改A哪个字母摇晃您的船以更改快捷方式。

当您在 Excel 中录制宏并指定A快捷键时,宏录制器会自动为您添加此隐藏属性。


* Rubberduck的模块重写器有这个问题,它让我发疯。


推荐阅读