Выберите окно с VBA, когда отображается форма Excel - PullRequest
0 голосов
/ 08 мая 2020

Когда я меняю ячейки, у меня есть древовидное представление в форме, расширяющееся до связанного элемента. Активная форма, неактивное окно Excel Изображение

Поскольку древовидные представления строятся быстрее, когда они скрыты, я скрываю форму, затем раскрываю дерево, а затем показываю форму.

Вот проблема, когда форма «показывает», что она находится сверху, а мое окно Excel не выбрано, поэтому мое колесо прокрутки не работает. Форма отключена модально. Мне нужно вручную щелкнуть окно Excel, чтобы повторно активировать его и включить прокрутку моих строк Excel. Форма с древовидным изображением - это в основном инструмент визуализации.

Я пробовал окно (1), активировав ячейку / рабочий лист, не работает, форма все еще вверху / прокрутка отключена.

Я вставил код, чтобы вручную выполнить второй щелчок мышью, но это работает только тогда, когда я медленно нажимаю / отпускаю, и я бы предпочел просто включить прокрутку или вывести окно наверх. Этот код в основном повторяет щелчок после того, как он развернул древовидное представление и показал форму, но если я щелкну быстро, это не сработает.

'-----------------
'mouse click necessary to avoid an additional click before scrolling.  This problem is caused by the 
'"showing" of form, placing it as the top window.
'Trees on forms build fast when the  hidden, so we need to show the form only after the tree is 
'built.
'-----------------


Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
' Create custom variable that holds two integers
Type POINTAPI
 Xcoord As Long
 Ycoord As Long
End Type

'Declare mouse events
Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Public Const MOUSEEVENTF_LEFTDOWN = &H2
Public Const MOUSEEVENTF_LEFTUP = &H4
Public Const MOUSEEVENTF_RIGHTDOWN As Long = &H8
Public Const MOUSEEVENTF_RIGHTUP As Long = &H10
'Declare sleep
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public XPos As Long
Public YPos As Long



Sub GetCursorPosDemo()
Dim llCoord As POINTAPI
' Get the cursor positions
GetCursorPos llCoord


XPos = llCoord.Xcoord
YPos = llCoord.Ycoord

' Display the cursor position coordinates
'MsgBox "X Position: " & llCoord.Xcoord & vbNewLine & "Y Position: " & llCoord.Ycoord
End Sub


Sub LeftClick()
  SetCursorPos XPos, YPos
  mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
  mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...