Страницы: 1
RSS
Имитация нажатия сочетания клавиш средствами API
 
Здравствуйте!

У меня возникла небольшая проблема в написании кода. Темы с форума (http://planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=8&TID=20197&MID=178051#message178051) прочитала, но это не то.

У меня есть код, который имитирует нажатие клавиш

Что я делаю: Есть столбик значений (~1000) который содержит только цифры (от 1 до 100). Я копирую каждую ячейку и вставляю в другую программу посредством стрелки "вниз".

Вопрос:
Как мне переделать код таким образом чтобы он имитировал сочетание клавиш "Ctrl+V" (вставка) и стрелку "вниз" (сдвинуться вниз на 1 ячейку)?

Другие способы (SendKey) не работают поскольку вставляю значение из Exscel в другие приложения, в которых они блокируются.
 
Что-то не густо с ответами...
Я подобное делаю скриптом AutoIt - в общем довольно несложный синтаксис, хороший хелп, форумы на разных ресурсах.
Готовый скрипт можно сконвертировать в выполняемый файл - это чтоб не ставить на машину сам AutoIt.
Но тут это offtop :)
 
Да, с ответами не густо.
Спасибо, сейчас посмотрю что это и с чем его едят! ;)
 
Вроде сделала ... но вставка прекращается на середине данных ... в чём может быть проблема?
Выкладываю файл.
 
может быть дело в объёме используемой памяти?
Неужели никто не сталкивался с этой проблемой?
 
Да, дело в памяти, но не в том направлении, как Вы себе представляете. ОС нужно некоторое время для обработки в памяти выполнения команд пользователя. В том виде, как у Вас сейчас отрабатывает макрос, непрерывность отсылки команд приводит к переполнению стека (аналог спама), и выполнение прерывается. Используйте функцию DoEvents, тогда проблема решится.
Изменено: Влад - 12.05.2013 21:46:38
 
Добавили DoEvents:
Код
For Each i In Selection
    '÷èñëî ìîæåò áûòü íå îäíîðàçðÿäíîå ...
    If Len(i) > 0 Then
        For v = 1 To Len(i)
            SendKey i.Offset(0, v).Value
        Next
    End If
    'Æì¸ì ñòðåëêó ÂÍÈÇ
    SendKey VK_DOWN
    DoEvents
Next


Не помогло.
 
Сделала и так ... но результат всё равно не тот ...
Код
For Each i In Selection
        For v = 1 To Len(i)
            DoEvents
            SendKey i.Offset(0, v).Value
        Next

    DoEvents
    SendKey VK_DOWN
Next
Изменено: Феля - 12.05.2013 23:07:30 (ошиблась ...)
 
Хотя этот код работает, если вводить значения в лист Excel.
А вот если вводить в ... Outlook, то всё равно всё останавливается ... где-то на середине.
 
Попробуйте еще добавить небольшую паузу перед отправкой сочетания клавиш, например пустой цикл.
 
сейчас ...
 
сейчас тестирую ... а вот есть может функция с ожиданием в милисекундах?
Application.Wait (Now + TimeValue("0:00:01")) очень долго получается.
 
Цикл от 1 до 10 не помог.
Добавлен цикл был так:
Код
For Each i In Selection
        For v = 1 To Len(i)
            DoEvents
      For n = 1 To 10
      Next
            SendKey i.Offset(0, v).Value
        Next

    DoEvents

    For n = 1 To 10
    Next

    SendKey VK_DOWN
Next


Цикл до 100 ... и DoEvents был после пустого цикла - тоже не помогло.
 
Пустой цикл до 1000 тоже не помог.
Странно всё это. Может это из той же области что и неработающее сочетание клавиш:
Код
Application.SendKeys "%{TAB}", True
 
Сделала так:
Код
Application.Wait (Now + TimeValue("0:00:05") / 10)

Возможно дело было в том, что нужно было нажимать стрелку вниз, а не энтер.

Ваше решение помогло ... благодарю.
 
Добрый вечер!

Вчёра всё работало на примере офисных приложений: Excel, Outlook, Блокнот.
Сегодня попыталась осуществить ввод данных в другой приложение - цифры вбиваются, а вот клавиши Enter и Down не работают. Хотя эти клавиши с клавиатуры нормально функционируют (т.е. если я нажимаю на этои клавиши они выполняются в сторонней программе своё предназначение).

Пожалуйста, подскажие в чём может быть проблема?

Спасибо.
 
Не, я бы на AutoIt делал... :)
 
Здравствуйте!
А можно этой утилитой с листа. Excel перенести данные? Это просто? Нужно устанавливать на компьютер программу? На работе прав админа нет.
 
Цитата
Hugo пишет:
Не, я бы на AutoIt делал...
Скажите пожалуйста, этот код подойдёт?
заголовок
Изменено: Феля - 13.05.2013 23:42:53
 
Ну я не настолько спец в AutoIt, чтоб так с ходу сказать пойдёт/непойдёт, но да, примерно так.
Только там ещё нужны файлы
GUIConstants.au3
ExcelCOM_UDF.au3
ну или другие, смотря как писать (у меня например есть Excel.au3, а ExcelCOM_UDF.au3 нет).
Ставите сам AutoIt, пишите/отлаживаете код, затем можно результат труда конвертнуть в exe - тогда уже AutoIt для работы не нужен.
Кстати кажется AutoIt работает без установки - достаточно просто скопировать папку. Так что админ может не понадобиться.
Если освоите - лишним не будет, я часто использовал, чтоб рутины избегать.
 
Здравствуйте!

Hugo, благодарю!

Я попробую на AutoIt. Но ... я столько времени потратила на Excel ... вот почему не работают Enter и Down?! Ну хоть кто-нибудь, объясните пожалуйста, очень надо! Дело принципа!  :)
Изменено: Феля - 14.05.2013 22:25:36
 
Здравствуйте!

Возвращаюсь к теме со стороны Excel: есть ли возможность приостанавливать выполнение макроса до момент нажатии пользователем на клавиши DOWN? Файл Excel при этот не должен становиться активным (оставаться активным должно то окно, которое было до нажатия клавиши).

Буду признательна за любую помощь.
Изменено: Феля - 16.05.2013 12:18:32
Страницы: 1
Читают тему
Наверх