【问题标题】:Excel Sendkeys - How to prevent Excel from getting focus back when VBA sends keys?Excel Sendkeys - 如何防止 Excel 在 VBA 发送密钥时重新获得焦点?
【发布时间】:2018-06-15 00:21:12
【问题描述】:

下面的代码没有按预期工作:

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),然后选择应用程序中的所有数据(Alt E S),复制所有选定的数据(Alt E C),然后返回 Excel(Alt+Tab)并粘贴剪贴板到单元格 A1。但 Excel 会粘贴“旧”剪贴板内容,它不会复制应用程序的内容。我试图在每行代码之间休眠 500 毫秒,但没有任何改变(Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)。

似乎对于每一行 SendKeys,Excel 都会自动将焦点带回工作表。如何防止它发生,以便在执行第二个 Alt+Tab 行之前将焦点保持在另一个应用程序上?

有什么线索吗?

【问题讨论】:

    标签: excel sendkeys vba


    【解决方案1】:

    这是不可能的

    根据https://msdn.microsoft.com/en-us/vba/excel-vba/articles/application-sendkeys-method-excel,sendkeys 方法仅将击键提交到活动应用程序的键缓冲区,在这种情况下是 Excel,而不是操作系统。

    【讨论】:

    • @strajano 合并似乎经常是一厢情愿哈哈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多