Могу ли я сосредоточиться на другом окне с помощью команды VBA в Excel 2007?

Я хочу запустить сценарий VBA из Excel 2007, который может переключать фокус на другое активное окно (ALT + TAB), отправлять команды в это окно, а затем возвращать фокус в Excel и продолжать выполнять команды в VBA.

Например:

Скопируйте содержимое ячейки A1, сфокусируйтесь на активном окне Internet Explorer, отправьте команду клавиши TAB, вставьте скопированные данные из A1, а затем снова сфокусируйтесь на Excel, чтобы продолжить сценарий VBA.

Это возможно? Я не мог найти нужную информацию в Интернете и чувствую, что это можно сделать с помощью Excel VBA.


person CheeseConQueso    schedule 02.02.2012    source источник
comment
Хотя можно делать то, что вы хотите, очень неуклюже, используя AppActivate & SendKeys, для вашего примера будет гораздо безопаснее либо автоматизировать IE (как предлагает JMAX), либо использовать XMLHTTP.   -  person brettdj    schedule 02.02.2012


Ответы (2)


В самом VBA вы не можете буквально отправлять ключи или управлять другим приложением. Тем не менее, вы можете использовать Microsoft API для моделирования поведения в Office Suite или, в некоторой степени, в Internet Explorer.

Вы также можете:

person JMax    schedule 02.02.2012
comment
Эта ссылка на vba-corner на самом деле показывает вам, как переключиться на активный экземпляр IE, так что это может быть то, что искал OP. Хотя я рекомендую просто автоматизировать IE с самого начала. - person JimmyPena; 07.02.2012

В итоге я нашел и использовал это программное обеспечение под названием AutoHotkey. Это бесплатно и с открытым исходным кодом.

Он позволяет создавать макросы с использованием проприетарного синтаксиса, который довольно интуитивно понятен в использовании.

Проблему, которую я хотел решить, было намного проще решить с помощью AutoHotkey по сравнению с Excel VBA.

Код AutoHotkey для указанного выше псевдокода:

#space::
;Focus to Excel and copy contents of cell A1
WinActivate Microsoft Excel - filename.xls
Send {Ctrldown}{Home}{Ctrlup}
Send ^c

;Focus to Internet Explorer, TAB to the first field, and paste clipboard data into it
WinActivate Google - Windows Internet Explorer
Send {Tab}
Send ^v

;Focus back to Excel
WinActivate Microsof Excel - filename.xls
return

Не стоит вдаваться в подробности этого синтаксиса, но я просто вставил его в демонстрационных целях.

Программа позволяет гораздо больше и заслуживает более внимательного изучения, если вам нужно автоматизировать задачи, требующие специальных действий мыши и клавиатуры в нескольких окнах. Также поддерживаются обычные аспекты программирования, такие как переменные и циклы.

Более общую информацию о программе и ее возможном использовании можно найти на WikiPedia.

person CheeseConQueso    schedule 04.02.2012
comment
Обратите внимание, что вы можете принять свой ответ, чтобы закрыть тему, пока кажется, что вы нашли решение своей проблемы. Кстати, спасибо, что поделились. - person JMax; 08.02.2012
comment
Я знал об этом и делал это в прошлом, но есть период времени, в течение которого вы должны подождать, прежде чем принять свой ответ. Спасибо, в любом случае - person CheeseConQueso; 08.02.2012
comment
извините я забыл о задержке - person JMax; 09.02.2012