我的快捷键不允许我运行消息框

时间:2018-05-17 15:35:08

标签: excel vba excel-vba

此代码的早期版本没有消息框,这有时会导致错误的工作簿被关闭。我添加了一个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

2 个答案:

答案 0 :(得分:1)

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

快捷键由隐藏的成员属性值定义,当您重写方法的签名或重写模块*时,VBE倾向于丢失成员属性;修改代码可能导致以前存在的属性以某种方式丢失。

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

成员属性应如下所示:

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

该确切属性将 Ctrl + Shift + A 与宏相关联;更改A,无论哪个字母都会改变您的快捷方式。

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

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

答案 1 :(得分:0)

在模块中编写以下2个子:

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

Public Sub InitiateMe()
    Application.OnKey "{a}", "OpenerQuick"
End Sub

仅运行InitiateMe。现在,当您按 a 时,将触发InitiateMe