Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 我的快捷键不允许我运行消息框_Vba_Excel - Fatal编程技术网

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

Vba 我的快捷键不允许我运行消息框,vba,excel,Vba,Excel,此代码的早期版本没有消息框,这有时会导致关闭错误的工作簿。我添加了一个“确定取消”消息框以防止发生这种情况,但当我使用快捷键打开它时,该消息框不会显示。我错过了什么 Sub openerQuick() Dim myfile As String Dim clientID As String Dim PDSfilename As String Dim myopener As Variant clientID = ActiveCell PDSfile

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

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个子模块:

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
将被触发。

我怀疑
MsgBox
本身与丢失宏快捷键有关

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

  • 从项目中删除模块,在提示是否导出时选择“是”
  • 在记事本++中打开导出的文件,这是您最喜欢的文本编辑器
  • 找到程序
  • 如果属性不存在,则添加该属性
  • 保存文件如果文件已更改,请重新导入到项目中
成员属性应如下所示:

Public Sub OpenerQuick()
    Attribute OpenerQuick.VB_ProcData.VB_Invoke_Func = "A\n14"
    '...code....
End Sub
该确切属性将Ctrl+Shift+A与宏相关联;更改
A
,无论哪个字母触礁,都可以更改快捷方式

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



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

你是说有一个触发宏的快捷键吗?在
If
语句之前添加
Debug.Print“words”
行。然后通过快捷键触发宏。然后检查即时窗口(在VBEditor中按CTRL+G键),查看是否看到“单词”。我这样做了,但没有看到“单词”。谢谢Mathieu,你真的帮助了我。另一方面,除了记事本++(因为我目前的工作已经让我对它有所了解)之外,肯定没有这样喜欢的文本编辑器。