Имитация нажатия кнопок клавиатуры из VBA Excel 2007

Почти во всех офисах крупных и не очень крупных предприятиях помимо основной информационной системы (если она есть) большинство работников продолжают активно работать с Excel  в виду его простоты, гибкости и функциональности. Не всегда программисты успевают вносить изменения в ту же 1C  или что там у Вас…. Вот и я однажды столкнулся с проблемой переноса данных из Excel в другую программу, которые осуществлялись каждый день и занимали довольно много времени, а интерфейса для перегрузки данных из Excel в базу данных не было. Зародилась мысль осуществить это при помощи имитации нажатия клавиш и, через пару недель, она была доведена до ума!

Статья предполагает, что вы хоть отдаленно знакомы с VBA Excel и знаете, как он работает, а я лишь покажу вам пару API-функций и расскажу, как я внедрил их в свой маленький проект.

Думаю, нет смысла здесь выкладывать то, что у меня получилось в полном виде, поэтому я сделаю очень упрощенный пример для взаимодействия Экселя со встроенным калькулятором.

Для начала создаем новый документ Эксель (если планируете добавить в свою работу формы, рекомендую формат *.xls, поскольку он нормально ведет себя с формами в 2007 Экселе).  Делаем три колонки – первые две числа, которые нужно сложить, а в третью мы перенесем результат сложения из калькулятора. Создаем кнопку и пишем в коде листа такой текст:

 

Private Declare Sub sapiSleep Lib "kernel32" Alias "Sleep" (ByVal DwMilliseconds As Long) 'Функция для зависания программы на заданное количество милисекунд

Private Declare Function GetWindowText Lib "user32.dll" _

Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long 'Функция для чтения заголовка окна по идентификатору

Private Declare Function GetForegroundWindow Lib "user32" () As Long 'Функция для чтения идентификатора текщего окна
Dim ThisBook As Object
Private Sub Proverka(ByVal WinName As String) 'Ожидание нужного окна

Dim Mystr As Long
Dim ip As String
Do ' Циклимся, пока не откроется нужно окно
sapiSleep (50)
        ip = String(20, 1)
        Mystr = GetForegroundWindow()
        X = GetWindowText(Mystr, ip, 20)
    Loop Until ip Like ("*" & WinName & "*")
   
End Sub
 
Private Sub CommandButton1_Click()
Set ThisBook = ActiveWorkbook().Worksheets("Лист1")
For i = 2 To 5
Proverka ("Калькулятор") 'Висим, пока не откроется окно калькулятора
Application.Wait Time:=Now + TimeSerial(0, 0, 1) 'Ждем одну секунду
SendKeys (ThisBook.Range("A" & i).Value) 'Пишем седержимое ячейки в блокнот
 
Proverka ("Калькулятор")
Application.Wait Time:=Now + TimeSerial(0, 0, 1)
SendKeys "{+}"
 
Proverka ("Калькулятор")
Application.Wait Time:=Now + TimeSerial(0, 0, 1)
SendKeys (ThisBook.Range("B" & i).Value)
 
Proverka ("Калькулятор")
Application.Wait Time:=Now + TimeSerial(0, 0, 1)
SendKeys "{=}"
 
Proverka ("Калькулятор")
Application.Wait Time:=Now + TimeSerial(0, 0, 1)
SendKeys "^{C}" ' Копируем значение из калькулятора
 
ThisBook.Range("C" & i).Value = ClipboardText() ' Вставляем сожержимое буфера в ячейку с результатом
Application.Wait Time:=Now + TimeSerial(0, 0, 1)
SendKeys "{del}"
 
Next i
 
End Sub
 
Function ClipboardText() 'Функция для чтение из буфера обмена
With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
.GetFromClipboard
ClipboardText = .GetText
End With
End Function

 

Затем жмем кнопку и открываем калькулятор.…  Смотрим, как данные из экселя набираются в калькуляторе, и результат заносится обратно в эксель… Такая конструкция довольно глючная и зависит от стабильности работы компьютера, но, если нет другого выхода, то пойдет))) Главное, чтоб можно было все тщательно проверить.

Пример файла excel

 

6 комментариев к “Имитация нажатия кнопок клавиатуры из VBA Excel 2007”

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

    [url=http://akademiya-centr-sveta.ru]http://akademiya-centr-sveta.ru[/url]
    С носителя ко носителю причина познания переходят с помощью активации
    Первоначальной клеточки памяти, с помощью телепатической
    коммуникации также инициаций. Данное ваша Первичная комната
    памяти водит вам ко синхронизации со ней, ради того воеже
    повернуть новейшую жизнедеятельность, переключиться тама,
    в каком месте вам вконец рады. Бросьте корректировать всетаки
    без исключения в таком случае, то сколько вам никак не удовлетворяет
    во существования. Возьмите однако без исключения со симпатией
    также переключаетесь. Вам ожидает вдосталь новейшая
    жизнедеятельность, абсолютная магии во активном Наличии
    Помощи, Влюбленности также опеки относительный Вам Верховными Мощностями.

  2. Краснодарский инструментальный завод
    [url=https://ksiz.ru/]Производство и продажа измерительного оборудования[/url]

    [url=https://www.ksiz.ru/catalog/kalibry-neftyanye-gost]калибры нефтяного сортамента[/url]

  3. Кориолисовые сенсоры Micro Motion® серии F предназначены для высокоточных измерений массового расхода, объемного расхода, а также для измерения плотности. Приборы серии F выпускаются с гладким покрытием, которое обеспечивает удобство очистки; кроме того, все сенсоры серии F могут быть установлены с возможностью самодренирования.
    [url=https://neftel.ru/rashodomer-micro-motion][img]http://dfc-co.com/wp-content/uploads/2018/04/48-1.jpg[/img][/url]
    Наилучшее качество измерений расхода и плотности обеспечивается компактным, дренируемым расходомером
    • Высокая чувствительность при компактном дизайне позволяет увеличить надежность технологического контроля
    • Легко очищаемая самодренируемая конструкция позволяет осуществлять быструю замену рабочей среды Широкий диапазон областей применения • Использование совместно с преобразователем FMT для систем дозирования
    • Для упрощения установки возможно использование новой 2-х проводной схемы питания по токовой петле
    • Возможность использования модуля беспроводной связи Wireless THUM™, PROFIBUS-DP и DeviceNet™ протоколов для повышения эксплуатационной гибкости
    • Детали изготовлены из нержавеющей стали либо из никелевых сплавов, а также исполнение для работы на высоких температурах и давлениях Превосходная надежность и безопасность
    • Доступна диагностика Smart Meter Verification для быстрой и полной проверки характеристик измерительного прибора без прерывания технологического процесса

    Кориолисовые расходомеры Micro Motion производства Emerson Process Management используются для широкого диапазона задач, они подходят для измерения сверхмалых и сверхбольших расходов. Приборы Micro Motion применяются для криогенных, санитарных, высокотемпературных приложений, в том числе для работы на высоком давлении. Для обеспечения совместимости с технологическими средами, компоненты сенсоров компании Micro Motion, контактирующие с измеряемой средой, могут изготавливаться из различных материалов. В настоящее время приборы компании Micro Motion являются непревзойденными по простоте установки и эксплуатационной гибкости благодаря возможности двухпроводного подключения к промышленным сетям.

    Кориолисовые расходомеры. Кориолисовые расходомеры обладают значительными преимуществами по сравнению с традиционными объемными расходомерами.
    Кориолисовые расходомеры:
    • Обеспечивают точные и воспроизводимые измерения в широком диапазоне расходов и условий технологического процесса.
    • Осуществляют прямое измерение массового расхода и плотности, а также измерение объёмного расхода и температуры; все измерения выполняются одним прибором.
    • Не имеют движущихся частей, что приводит к минимизации эксплуатационных расходов.
    • Не требуют прямолинейных участков трубопровода или установки устройств для выпрямления потока, что приводит к упрощению и удешевлению монтажа.
    • Предоставляют возможность расширенной диагностики как самого расходомера, так и технологического процесса.

    Кориолисовые сенсоры Micro Motion серии F.

    Cенсоры расхода Micro Motion серии F имеют компактное исполнение, что позволяет размещать их в ограниченном пространстве; в то же время обеспечивается высочайшая точность измерений расхода и плотности практически для всех задач, включающих перекачку жидких или газообразных сред. С сенсорами серии F можно забыть о дорогих повторных калибровках; для серии F достаточно одной калибровки, которая подходит для всех случаев измерения потоков жидкостей, газов и смесей. При конструировании каждого сенсора серии F компания Micro Motion использует весь свой накопленный опыт в данной области. Детали сенсоров серии F, контактирующие с рабочей средой, могут быть изготовлены из нержавеющей стали, либо из никелевых сплавов; это позволяет выбрать детали, материал которых наиболее совместим с рабочей средой. Отдельные модели серии F доступны в исполнениях для работ при высоких температурах и давлениях.

    Купить с доставкой расходомер Micro Motion можно [url=https://neftel.ru/rashodomer-micro-motion]neftel.ru/rashodomer-micro-motion[/url]

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *