我實際上碰到了這個確切的問題,並最終找到了解決我的問題的方法。
它是Shift按鈕,用於調用您的代碼的鍵盤快捷鍵。
顯然有Excel中的一個功能,專門設計用於防止代碼當打開工作簿和移位鍵被按下,但運行不幸的是這也影響了工作簿打開通過VBA的Workbook.Open
方法。這在KB Article 555263中提到,適用於Excel 2000 & 2003,但我在Excel 2010中遇到了同樣的問題,所以我想它也會影響2007年。
當您嘗試通過代碼很早在程序中打開工作簿時,會發生這種情況。如果在您有足夠時間實際釋放Shift按鈕之前撥打Workbook.Open
的電話號碼,則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
(注:此代碼是針對Excel的32位版本的64位版本將需要使用。 Declare
聲明中的PtrSafe
屬性)。
如果你不想增加額外的代碼,那麼你唯一的其他選擇是不使用按Ctrl +移+一些信推出宏,還是後來把Workbook.Open
命令宏(在開始時不是正確的),以便給自己啓動它之後釋放Shift按鈕的時間。
你說它不「做任何事情」 - 你期望看到什麼?據推測,您發佈的示例後面還有更多代碼。什麼是FunctionGetFileName? –
預期的結果是執行下一行FunctionGetFileName,並繼續執行整個文檔。 FunctionGetFileName是我在程序的其他地方寫的一個函數,它從FilePath中找到FileName,但之後還有更多的代碼不能執行。然而,從進一步的實驗中,我縮小了問題的範圍並相應修改了問題。 – soytsauce
什麼版本的Excel?在2007年爲我工作的Ctrl + Shift + F。 –