Excel Sendkeys - 如何防止 Excel 在 VBA 发送键时重新获得焦点?
Excel Sendkeys - How to prevent Excel from getting focus back when VBA sends keys?
下面的代码没有按预期工作:
Sub CopyDataFromAppThenBackToExcel()
SendKeys "%{TAB}" 'Send Alt+TAB
SendKeys ("%es") 'Send Alt then "E" then "S"
SendKeys ("%ec") 'Send Alt then "E" then "C"
SendKeys "%{TAB}"
Range("A1").Select
ActiveSheet.Paste
End Sub
当我单击 Excel 工作表中的按钮时,将执行此代码。它应该将应用程序置于焦点 (Alt+Tab),然后 select 应用程序中的所有数据 (Alt E S),复制所有 selected 数据 (Alt E C),然后返回 Excel (Alt+Tab) 并将剪贴板粘贴到单元格 A1。但是 Excel 粘贴的是 "old" 剪贴板内容,它不会复制应用程序的内容。我试图在每行代码之间休眠 500 毫秒,但没有任何改变 (Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr
))。
似乎对于每个 SendKeys 行,Excel 都会自动将焦点带回工作表。我如何防止它发生,以便在执行第二个 Alt+Tab 行之前焦点一直在另一个应用程序上?
有什么线索吗?
这是不可能的
根据 https://msdn.microsoft.com/en-us/vba/excel-vba/articles/application-sendkeys-method-excel,sendkeys 方法仅将击键提交到活动应用程序的键缓冲区,Excel 在这种情况下,而不是 OS。
下面的代码没有按预期工作:
Sub CopyDataFromAppThenBackToExcel()
SendKeys "%{TAB}" 'Send Alt+TAB
SendKeys ("%es") 'Send Alt then "E" then "S"
SendKeys ("%ec") 'Send Alt then "E" then "C"
SendKeys "%{TAB}"
Range("A1").Select
ActiveSheet.Paste
End Sub
当我单击 Excel 工作表中的按钮时,将执行此代码。它应该将应用程序置于焦点 (Alt+Tab),然后 select 应用程序中的所有数据 (Alt E S),复制所有 selected 数据 (Alt E C),然后返回 Excel (Alt+Tab) 并将剪贴板粘贴到单元格 A1。但是 Excel 粘贴的是 "old" 剪贴板内容,它不会复制应用程序的内容。我试图在每行代码之间休眠 500 毫秒,但没有任何改变 (Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr
))。
似乎对于每个 SendKeys 行,Excel 都会自动将焦点带回工作表。我如何防止它发生,以便在执行第二个 Alt+Tab 行之前焦点一直在另一个应用程序上?
有什么线索吗?
这是不可能的
根据 https://msdn.microsoft.com/en-us/vba/excel-vba/articles/application-sendkeys-method-excel,sendkeys 方法仅将击键提交到活动应用程序的键缓冲区,Excel 在这种情况下,而不是 OS。