Работаю в чате. Наработал себе очень много шаблонов в Эксель и всё что мне нужно, это не проходить путь Клик Эксель - Клик инфу ( всегда одна ячейка) - Копировать (CTRL C) - Клик программу - клик в поле программы - Вставить (CTRL V). Я хочу что бы было так: Клик в 1 ячейку Эксель - Клик макрос (либо Энтер) - И информация автоматически залетит в станет поле моей программы и переключиться на неё. Уважаемые, если знаете как решить эту задачу, подскажите, пожалуйста.
Хех..) Кнопка хороша. Но всё же, когда я целый день делаю Конрл Ц, Контрл В и вечно скачу между вкладками программ мне очень хочется сделать так как я описал. По этому если знаете ответ как застолбить заранее место для вставки то помогите, подскажите.
Ознакомьтесь с правилами форума. Предложите корректное название темы. С таким названием модераторы тему закроют. Дайте пример какая структура файла, с которым вы работаете и что вы хотите чтобы с ним происходило для упрощения вашей жизни. А в таком виде думаю вам поможет только кнопка по ссылке.
Расшифруйте. "Клик клик Эксель" - это двойной клик по ячейке? Вы всегда копируете одну ячейку или бывает что диапазон из нескольких ячеек? Другая программа понимает Ctrl+V для вставки или другое сочетание клавиш?
Я всегда копирую только одну ячейку. Другая программа принимает Контрл В. По движениям. Клик ячейка - контрл ц - клик программа - клик поле - контрл в.
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare PtrSafe Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Const SW_SHOWNORMAL = 1&
Public Status As Integer
''''''''''''''' Активирует окно по названию '''''''''''''''''''''''''''''''''''''
Sub main()
Dim hwnd&
hwnd = FindWindow(vbNullString, "НАЗВАНИЕ ОКНА")
If hwnd <> 0 Then 'Если открыто
ShowWindow hwnd, SW_SHOWNORMAL
Else 'Если нет
Exit Sub
End If
End Sub
Также можно имитировать нажатие мыши: Определяем нужное положение в рамках рабочего пространства:
Скрытый текст
Код
'Позиция мыши
Declare PtrSafe 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
Sub GetCursorPosDemo()
Dim llCoord As POINTAPI
' Get the cursor positions
GetCursorPos llCoord
' Display the cursor position coordinates
MsgBox "X Position: " & llCoord.Xcoord & vbNewLine & "Y Position: " & llCoord.Ycoord
End Sub
Затем кликаем: (Есть синглклик и даблклик)
Скрытый текст
Код
'Кликаем мышью
Public Declare PtrSafe Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Public Declare PtrSafe 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
Public Sub SingleClick(Optional ByVal x = 300, Optional ByVal y = 300)
SetCursorPos x, y 'x and y position
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
Public Sub DoubleClick(Optional ByVal x = 300, Optional ByVal y = 300)
'Double click as a quick series of two clicks
SetCursorPos x, y 'x and y position
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
Public Sub RightClick(Optional ByVal x = 300, Optional ByVal y = 300)
'Right click
SetCursorPos x, y 'x and y position
mouse_event MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
End Sub
Также имитация Ctrl+C и Ctrl+V
Скрытый текст
Код
SendKeys "^c"
SendKeys "^v"
Между действиями желательно проставлять слипы:
Скрытый текст
Код
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)
ArRiO, 40 человек могли бы и скинуться и закинуть вопрос в раздел "Работа" и получить решение с учетом всех хотелок и возможностью доработки функционала. Не думаю - что разорились бы.
1. По поводу "скинуться" это к сожалению не вариант. Простите. Однако я могу от себя что-то платить за решение особенно каверзных тупиковых вопросов. 2. По поводу ответа Magistor8. Очень ёмко. Сейчас по частям подналаживаю Ваш скрипт. Уже в первой части ShowWindow hwnd открывает моего подопытного поверх других окон "Calculator" только из позиции "свернуто", а нужно что бы даже когда он развернут он становился поверх других окон и " загорался" активным окном. 3. Hogo, я не могу ставить стороннее ПО.. (
Спасибо что дали ветор мышления. Это WinApi называется? Он в полной мере в VBA поддерживается или есть какие-то ограничения? Где про это почитать можно?
Слишком много посторонних документов открыто что бы ограничится Alt+tab. Не всегда удобно. Я сейчас перед раскрытием попробую насильно сворачивать окно. Надеюсь получится.
ArRiO написал: Помимо меня 40 человек желают что бы это заработало
Серьезный аргумент.
Попробуйте поработать с прилагаемой надстройкой. Рассчитана на версии Excel от 2007.
После ее открытия при первом двойном щелчке по ячейке будет предложено выбрать окно ("произвольной программы") для копирования содержимого ячейки. При последующих щелчках по непустым ячейкам копирование будет продолжаться без выбора окна.
Для отказа от копирования или для выбора другого окна дважды щелкните по пустой ячейке.
Для коллективного использования поместите данную надстройку в доступный сетевой каталог и установите для нее атрибут файла "только чтение" (read only). Успехов!
magistor8, вот так работает безотказно! Это на основе Вашего кода.
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare PtrSafe Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long Const SW_SHOWNORMAL = 1& Public Status As Integer
''''''''''''''' Активирует окно по названию ''''''''''''''''''''''''''''''''''''' Sub вот() Dim hwnd& hwnd = FindWindow(vbNullString, "НАЗВАНИЕ ПРОГРАММЫ") If hwnd <> 0 Then 'Если открыто ShowWindow hwnd, SW_MINIMIZE 'свернуть ShowWindow hwnd, SW_SHOWNORMAL 'развернуть Else 'Если нет Exit Sub End If End Sub
sokol92, рассматриваю Ваш вариант. Не могу разобраться как это работает и как активируется и вообще как это, блин, запустить и протестить, хотя бы на калькуляторе. Гугл в помощь! Когда разберусь, отпишусь.
magistor8 SendKeys "^c" - имитация Ctrl C не работает, почему-то. Скорее всего по тому что я не подключил функцию API Windows какую-то (одной из тех непонятных строк, что Вы мне прислали.) Заменил на ActiveCell.Copy (копировать активную ячейку)
Теперь бы ещё научится находить программу по части имени, а не по 100% совпадению.