可能有一種方法使用SendKeys
- 但SendKeys
是臭名昭着的氣質。這裏是一個更可靠的方法:
1)如果你不已經擁有了它舉辦這樣的,有按鈕的點擊事件處理程序1行子,看起來像:
Private Sub CommandButton1_Click()
Process
End Sub
其中Process
是實際承擔繁重工作的子。總的來說,我認爲讓事件處理程序主要用作調度員來執行這個操作是個好主意。
2)更改Process
代碼(或任何你選擇將它命名),以下列方式:
一)修改的第一行看起來像
Sub Process(Optional Verbose As Boolean = True)
b)如果Process
有像
MsgBox "Processed!"
通過
更換
3)在代碼你上述給,更換線
ActiveSheet.CommandButton1.value = true
由線
Application.Run "A.xls!Process", False
這種方法將完全繞過按鈕並運行該按鈕通常觸發碼,但在靜音模式下運行它。
開編輯:要使用SendKeys
您可以執行以下操作。放線
Application.SendKeys "~"
前行
ActiveSheet.CommandButton1.value = True
~
是Enter
字符快捷方式。 SendKeys
本身不會發送按鍵,而是將某些內容放在Windows Message Queue上。 VBA沒有任何直接控制此消息的處理時間。在這種情況下,缺乏控制是一種好處。VBA解釋器移到下一行,觸發MsgBox
。在處理SendKeys
消息時,消息框上的默認按鈕Okay
具有焦點,因此接收到輸入密鑰。這甚至可能在盒子被塗上之前發生,使得MsgBox
似乎永遠不會存在 - 但是在你有時間看到它之前,最好把它看作是被破壞的。
之所以需要在單擊該按鈕的行之前有SendKeys
行,是因爲一旦出現消息框,它就會導致VBA解釋器等待它關閉 - 因此調用代碼將暫停其直到消息框關閉後才執行,因此SendKeys
只有在不再需要時纔會被處理。我不太相信SendKeys
。我懷疑有時當你運行代碼時,會出現消息框之前,新激活的工作表中的A1
將收到回車鍵(將選擇從A1
轉移到A2
)。我不確定是否會發生這種情況,但是如果解決辦法可能是將SendKeys
移動到VBScript程序。在點擊按鈕之前啓動該程序(使窗口最小化並且不等待返回)。 VBScript程序在使用SendKeys
之前可以暫停0.5秒。該腳本將在不同的線程中運行,因此它不會被消息框阻止。
嘿,約翰,我生成MsgBox的「B」文件就像一個黑盒子,我無法控制它,我只從該文件調用一個小函數,因爲輸出將用在我的主文件中擅長其他一些功能。它只是當「B」文件調用完成後,它給了我一個惱人的MsgBox彈出告訴我,過程完成..我想自動點擊「確定」繼續前進...... – lukieleetronic
哇,我找到了一個如果我在調用VBA函數之前發送application.sendkeys「〜」,MsgBox永遠不會出現......但爲什麼? – lukieleetronic
@lukieleetronic我添加了我認爲是正在發生的事情的解釋。 SendKeys解決方案很少令人滿意,但有時它們是不可避免的。 –