Когда я меняю ячейки, у меня есть древовидное представление в форме, расширяющееся до связанного элемента. Активная форма, неактивное окно 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