我正试图让VBA解雇命令
sImportFilePath = Application.GetOpenFilename(FileFilter:= _
"Excel Files (*.xls), *.xls", Title:="Choose The Source File")
Application.Workbooks.Open (sImportFilePath)
sImportFileName = FunctionGetFileName(sImportFilePath)
Run Code Online (Sandbox Code Playgroud)
当我单步执行该功能时它们会工作,但是当我使用热键Ctrl + Shift + F或任何其他热键时,该Application.Workbooks.Open
命令可以工作,但它会导航新的Excel文档,然后不会执行任何操作.但是,当我在开发人员选项卡中打开"宏"时,选择我的宏,然后单击"运行",一切运行正常.
psu*_*003 24
我实际上遇到了这个问题,最终找到了解决问题的方法.
它是Shift用于调用代码的键盘快捷键中的按钮.
显然,Excel中有一项功能专门用于防止代码在打开工作簿并按下Shift键时运行,但不幸的是,这也会影响Workbook.Open
通过VBA 使用该方法打开工作簿.这在KB Article 555263中提到,适用于Excel 2000和2003,但我在Excel 2010中遇到了同样的问题,所以我想它也影响了2007.
当您尝试在程序的早期通过代码打开工作簿时,会发生这种情况.如果Workbook.Open
在您有足够的时间实际放开Shift按钮之前已在代码中达到调用,则Excel会将此解释为阻止代码运行并中止该过程.并且没有错误消息或我找到的任何内容.它突然停止了.
解决方法/修复方法是强制代码在发出Workbook.Open
命令之前等待释放Shift键.
根据文章,只需将此代码添加到您的宏,并应该这样做:
'Declare API
Declare Function GetKeyState Lib "User32" (ByVal vKey As Integer) As Integer
Const SHIFT_KEY = 16
Function ShiftPressed() As Boolean
'Returns True if shift key is pressed
ShiftPressed = GetKeyState(SHIFT_KEY) < 0
End Function
Sub Demo()
Do While ShiftPressed()
DoEvents
Loop
Workbooks.Open Filename:="C:\MyPath\MyFile.xlsx"
End Sub
Run Code Online (Sandbox Code Playgroud)
(注意:此代码适用于32位版本的Excel.64位版本需要使用语句中的PtrSafe
属性Declare
).
如果您不想添加额外的代码,那么您唯一的其他选择是不使用Ctrl+ Shift+ Some Letter来启动宏,或者Workbook.Open
稍后将命令放在宏中(不是在开头)以便给自己留出时间启动后释放Shift按钮.
归档时间: |
|
查看次数: |
17886 次 |
最近记录: |