Применение.SendKeys «({1068})» не работает вместе с приложением.Вовремя

#excel #vba #sendkeys

#excel #vba #sendkeys

Вопрос:

Я пытаюсь получить макрос по расписанию через приложение.OnTime, как показано ниже (находится в этом справочнике):

 Private Sub Workbook_Open()        
    Application.OnTime TimeValue("15:50:02"), "CopyScreen"                 
End Sub                 
  

Тогда как подраздел «CopyScreen» выглядит следующим образом (расположен в обычном модуле):

 Sub CopyScreen()

Application.SendKeys "({1068})", True          
DoEvents             
ActiveSheet.Paste             
End Sub               
  

Модуль CopyScreen() отлично работает при вызове его из командной строки (F5), но при вызове его через запланированный подраздел Workbook_Open() копируется черный снимок экрана. Есть какие-нибудь идеи здесь?

Ответ №1:

Я получил его для работы с этим кодом:

 Sub CopyScreen()

  Dim sht As Worksheet
  Set sht = ActiveSheet
  
  Application.SendKeys "({1068})", True
  DoEvents
  With sht
      .Activate
      .Paste
  End With 'sht
  

Очевидно, Excel забывает ActiveSheet, когда переходит в спящий режим в ожидании установленного времени. Поди разберись!

ХТХ

Конечная подлодка

Комментарии:

1. Хм, для меня по-прежнему никаких изменений. Есть ли какой-либо другой способ сделать снимок экрана, кроме SendKeys (который и так может быть неточным)?