Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Как обратно передать фокус Excel


Автор: AlexanderNO 11.12.2007, 23:25
Программно из Excel запускаю командой Shell приложение (DDE), которое будет работать совместно с Excel. Приложение после запуска отбирает фокус. Как вернуть фокус Excel? 

Автор: Naghual 11.12.2007, 23:55
Shell(PathName, vbNormalNoFocus)
или
Shell(PathName, vbMinimizedNoFocus)

Автор: AlexanderNO 12.12.2007, 00:04
Спасибо, завтра попробую. Если что не так - доложу.

Автор: AlexanderNO 12.12.2007, 20:26
Уважаемый Naghual. К сожалению такое управление по Shell не срабатывает: после его выполнения программа DDE все равно перехваитывает фокус и не возвращает.
Тут нужно что - то другое. 
В силу определенных причин я вынужден делать временную задержку, иначе идет сбой. в результате программа выглядит так:
Dim retval As Double
retval = Shell(cdmdir & "\Cdmdde.exe", vbMinimizedNoFocus)
Application.Wait (Now + TimeValue("0:00:01")) 
Есть ли возможность передать фокус после Wait.

Автор: kapbepucm 12.12.2007, 21:52
Может это?
Код
Public Declare Function GetForegroundWindow Lib "user32.dll" () As Long
Public Declare Function SetForegroundWindow Lib "user32.dll" (ByVal HWND As Long) As Long
Public Sub Test()
  Dim FW As Long
  FW = GetForegroundWindow

  Dim retval As Double
  retval = Shell(cdmdir & "\Cdmdde.exe", vbMinimizedNoFocus)
  Application.Wait (Now + TimeValue("0:00:01"))

  SetForegroundWindow FW
End Sub

Автор: AlexanderNO 17.12.2007, 22:57
kapbepucm большое СПАСИБО! Все прекрасно сработало. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)