Макрос нажатия enter в excel

 

ДмСмирнов

Пользователь

Сообщений: 64
Регистрация: 27.12.2017

#1

27.12.2017 19:45:09

Добрый день! Помогите, пожалуйста! Изучил вопрос запуска Enter-ом в форуме, но макрос не запускается. Подскажите, где ошибка?

есть макрос, который запускался с сочетания клавиш ctri+q:

Код
Sub МакросМС ()
'
' МакросМС Макрос
'
' Сочетание клавиш: Ctrl+q
'
    Range("H2").Select
    Selection.ClearContents
    Range("A2").Select     

    и так далее

Добавляю в него

Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)   
   Application.OnKey "{~}", "StartEnter"   
End Sub 

получаю новый макрос:

Код
Sub МакросМС1()
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Application.OnKey "{~}", "StartEnter"
End Sub
    Range("H2").Select
    Selection.ClearContents
    Range("A2").Select
    Selection.ClearContents
    With Selection.Interior  

и так далее

Нажимаю Enter, никаких чудес не происходит.
В чем ошибка?

Код
Application.OnKey "{~}", "StartEnter"

 пробовал заменить на

Код
Application.OnKey "{ENTER}", "StartEnter"

тоже не запускается

Изменено: ДмСмирнов27.12.2017 20:41:07

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

#2

27.12.2017 19:48:44

Цитата
ДмСмирнов написал: В чем ошибка?

Во всем. Зачем Вы

СОБЫТИЙНЫЙ

макрос вставляете в тело стандартного макроса?

Согласие есть продукт при полном непротивлении сторон.

 

webley

Пользователь

Сообщений: 1995
Регистрация: 01.01.1970

вот так попробуйте:
Application.OnKey «~», «StartEnter»  

 

ДмСмирнов

Пользователь

Сообщений: 64
Регистрация: 27.12.2017

вся беда в том, что я практически самоучка (на уровне подготовительного класса :)), поэтому могу допускать какие-то элементарные ошибки, о которых даже не догадываюсь.

 

ДмСмирнов

Пользователь

Сообщений: 64
Регистрация: 27.12.2017

а как в данном случае должен выглядеть макрос?

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

#6

27.12.2017 19:58:53

В модуль книги

Код
Private Sub Workbook_Open()
'  Application.OnKey "~", "myMacro"      'для буквенной клавиатуры
  Application.OnKey "{ENTER}", "myMacro"    'для цифровой клавиатуры
End Sub

В общий модуль

Код
Sub myMacro()
    MsgBox "Запущен макрос 'myMacro' по нажатию 'Enter'"
End Sub

Сработает по нажатию Enter на цифровой клавиатуре

Прикрепленные файлы

  • Запуск макроса по Enter.xlsm (13.05 КБ)

Согласие есть продукт при полном непротивлении сторон.

 

ДмСмирнов

Пользователь

Сообщений: 64
Регистрация: 27.12.2017

либо я безнадежен, либо безнадежно туплю…

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

Да в чем проблема-то? Даже файл-пример вместо Вас соорудил! Макросы, естественно, должны быть разрешены

Согласие есть продукт при полном непротивлении сторон.

 

ДмСмирнов

Пользователь

Сообщений: 64
Регистрация: 27.12.2017

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

#10

27.12.2017 20:26:56

Цитата
Sanja написал: В модуль книги

Я так понимаю Вам эта фраза ни о чем не сказала?

ЧТО ТАКОЕ МОДУЛЬ? КАКИЕ БЫВАЮТ МОДУЛИ?

Согласие есть продукт при полном непротивлении сторон.

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

ДмСмирнов, вернитесь в стартовое сообщение и приведите его в порядок: для форматирования кода имеется специальная кнопка (см. скрин).

 

ДмСмирнов

Пользователь

Сообщений: 64
Регистрация: 27.12.2017

к сожалению, лишь о том, что я видимо очень слабо знаком с азами.
понимаю, что здесь не ликбез… буду читать матчасть

 

ДмСмирнов

Пользователь

Сообщений: 64
Регистрация: 27.12.2017

вроде бы разложил по модулям, как предложено выше, но снова безрезультатно.

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

Апостроф надо было убрать

Согласие есть продукт при полном непротивлении сторон.

 

ДмСмирнов

Пользователь

Сообщений: 64
Регистрация: 27.12.2017

уже хочется застрелиться  :(
выдает системное сообщение «Запущен макрос по нажатию Enter».
дальше ничего….  :qstn:  

Изменено: ДмСмирнов27.12.2017 22:07:37

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

#16

27.12.2017 22:49:31

Цитата
ДмСмирнов написал: выдает системное сообщение

Мне тоже скоро захочется застрелиться.
Это не системное сообщение. Это сообщение выдается макросом myMacro, который и запрограммирован на выполнение по нажатию Enter/
А Вы чего ожидали?

Согласие есть продукт при полном непротивлении сторон.

 

ДмСмирнов

Пользователь

Сообщений: 64
Регистрация: 27.12.2017

я ожидал выполнения макроса МС1. нет так?

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

#18

27.12.2017 22:58:16

Цитата
ДмСмирнов написал:
я ожидал выполнения макроса МС1

Ну так и вызывайте этот макрос вместо myMacro. В чём проблема?

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

Без комментариев

Согласие есть продукт при полном непротивлении сторон.

 

ДмСмирнов

Пользователь

Сообщений: 64
Регистрация: 27.12.2017

спасибо большущее. однозначно, мне есть куда развиваться)))

 

恭喜!

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

#22

28.12.2017 10:17:47

Цитата
ДмСмирнов написал:
уже хочется застрелиться
Цитата
Sanja написал:
Мне тоже скоро захочется застрелиться.

Порадовали к новому году! Ржал на все метро!)) Фух…

Изменено: bedvit28.12.2017 10:23:36

«Бритва Оккама» или «Принцип Калашникова»?

Имитация нажатия клавиш на клавиатуре в VBA Excel с помощью оператора SendKeys, в том числе эмуляция нажатия сочетаний клавиш. Синтаксис, коды, примеры.

Параметры оператора SendKeys:

Параметр Описание
string Обязательный параметр. Строковое выражение, возвращающее код клавиши (сочетания клавиш).
wait Необязательный параметр. Логическое значение, определяющее режим ожидания.
False (по умолчанию) – контроль процедуре возвращается сразу после отправки кода клавиш.
True – перед возвратом контроля процедуре коды клавиш обрабатываются.

Имитация нажатия клавиш

Эмуляция нажатия алфавитно-цифровых клавиш из кода VBA Excel, не представляющих спецсимволы: параметру string задается значение символа в прямых кавычках, например, "А", "Абвгд", "356".

Имитация нажатия клавиш, представляющих спецсимволы: параметру string задается значение символа в фигурных скобках, например, "{^}", "{)}".

Спецсимволы, которые следует заключать в фигурные скобки: плюс +, возведение в степень ^, знак процента %, тильда ~, круглые скобки (), квадратные скобки [] и сами фигурные скобки {}. Символы фигурных скобок указываются так: "{{}" и "{}}".

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

Фигурные скобки используются и для имитации нескольких нажатий одной клавиши из кода VBA Excel. В этом случае параметр string записывается в виде {клавиша число}, где число – количество нажатий. Например: "{а 10}".

Коды специальных клавиш

Клавиша Код
BACKSPACE {BACKSPACE} или {BS}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DEL или DELETE {DELETE} или {DEL}
СТРЕЛКА ВНИЗ {DOWN}
END {END}
ENTER {ENTER} или ~
ESC {ESC}
HELP {HELP}
HOME {HOME}
INS или INSERT {INSERT} или {INS}
СТРЕЛКА ВЛЕВО {LEFT}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC}
СТРЕЛКА ВПРАВО {RIGHT}
SCROLL LOCK {SCROLLLOCK}
TAB {TAB}
СТРЕЛКА ВВЕРХ {UP}
F1 … F16 {F1}{F16}

Эмуляция сочетаний клавиш

Чтобы указать сочетание клавиш с SHIFT, CTRL, ALT или их комбинацией, необходимо добавить перед кодом клавиши один или несколько следующих кодов:

Клавиша Код
SHIFT +
CTRL ^
ALT %

Чтобы указать, что клавиши SHIFT, CTRL и ALT в любом сочетании необходимо удерживать, нажимая несколько других клавиш, заключите код для последних клавиш в круглые скобки. Например, чтобы указать, что нужно удерживать клавишу SHIFT, нажимая клавиши а, б, в, г, д, введите "+(абвгд)".

Важное примечание:
Применение оператора SendKeys может приводить к автоматическому отключению* правого цифрового блока клавиатуры (переключает на стрелки и специальные клавиши). Чтобы вернуть исходную функциональность цифрового блока, необходимо в конце процедуры применить имитацию нажатия клавиши «NUM LOCK»: SendKeys "{NUMLOCK}". К сожалению, работает не всегда.

* Обнаружено в Windows 8.1 (Excel 2016).

Примеры с оператором SendKeys

Коды примеров запускаются через кнопку на рабочем листе, иначе имитация нажатия клавиш произойдет в окне редактора VBA с записью символов внутри процедуры. Попробуйте, ради интереса, запустить код первого примера из редактора VBA.

Пример 1
Заполняем первые три ячейки столбца «A» различными значениями, имитируя нажатия клавиш из кода VBA Excel:

Sub Primer1()

‘Выбираем первую ячейку

Range(«A1»).Select

‘Нажимаем клавиши «а», «б» и «в»

SendKeys «абв»

‘Нажимаем «ENTER»

SendKeys «~»

‘Нажимаем клавиши «1», «2», «3» и «ENTER»

SendKeys «123  ~»

‘Нажимаем клавишу «7» пять раз и «ENTER»

SendKeys «{7 5} ~»

‘Активируем правый цифровой блок

‘SendKeys «{NUMLOCK}»

End Sub

Пример 2
Раскрываем с помощью кода VBA Excel автофильтр или выпадающий список (имитация нажатия сочетания клавиш ALT+↓):

Sub Primer2()

‘Выбираем ячейку с автофильтром или раскрывающимся списком

Range(«D1»).Select

‘Раскрываем список

SendKeys «%{DOWN}»

‘Активируем правый цифровой блок

‘SendKeys «{NUMLOCK}»

End Sub

Пример 3
Еще три варианта эмуляции нажатия сочетаний клавиш:

‘Создание новой книги

SendKeys «^n»

‘Открытие Диспетчера имен

SendKeys «^{F3}»

‘Открытие Диспетчера задач

SendKeys «^+{ESC}»

Google should provide me with ample examples but none of them seem to work

What I want: Everytime the user presses, and then releases, the ENTER key, for my program to do do something (ie. create a MsgBox, or call function Foo). I would prefer this in the form of a MWE

What I have done: I have tried googling it but none of the examples are functional. They compile, but don’t do anything. I have also made sure to save in a macro compatible Excel format.

What I am using: I am using Excel 2016, 64 bit with Office 365

EDIT: The user is entering this information into the worksheet. I want to intercept the user input and everytime they press ENTER, take the cursor/active cell down two rows, so there is an empty cell below every cell. If the user presses tab, I want to take the cursor/active cell right two columns, so there si an empty cell to the right of every cell.

EDIT 2: here is a MWE of what I have right now which should work, but which does nothing. I am adding this to the worksheet, and not as a module

Sub SomeActions()
    MsgBox ("Hello")
End Sub

Private Sub Workbook_Open()
    Application.OnKey "~", "SomeActions"
End Sub

Olegik1974

0 / 0 / 0

Регистрация: 29.06.2017

Сообщений: 7

1

29.06.2017, 20:50. Показов 5441. Ответов 3

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Привет Всем.
В сети нашел вот такой код:

Visual Basic
1
2
3
Sub StartEnter()
MsgBox ("sadfsdfsf")
End Sub

Откорректировал для себя:

Visual Basic
1
2
3
Sub StartEnter()
[r1].Activate
End Sub

Код рабочий,но только не при нажатии на кнопку Enter
Нужно чтобы при внесении данных в любую ячейку на листе и нажатии на Enter данные в ячейке сохранялись, а ячейка r1 становилась активной.
Если можно помогите.
Спасибо



0



0 / 0 / 0

Регистрация: 29.06.2017

Сообщений: 7

29.06.2017, 20:58

 [ТС]

2

вот файл



0



OLEGOFF

1062 / 506 / 137

Регистрация: 27.02.2013

Сообщений: 1,451

29.06.2017, 21:10

3

Лучший ответ Сообщение было отмечено Dragokas как решение

Решение

Olegik1974, поместите в код листа

Visual Basic
1
2
3
Private Sub Worksheet_Change(ByVal Target As Range)
[r1].Activate
End Sub



0



0 / 0 / 0

Регистрация: 29.06.2017

Сообщений: 7

29.06.2017, 21:21

 [ТС]

4

Работает))))
СПАСИБО БОЛЬШОЕ



0



Группа: Пользователи

Ранг: Форумчанин

Сообщений: 101


Репутация:

0

±

Замечаний:
0% ±


Excel 2003, 2007

Есть макрос:
[vba]

Код

   Private Sub AddRow()
     Selection.EntireRow.Insert
     FirstRow = ActiveCell.Row
     FirstCol = ActiveCell.Column
     Range(Cells(FirstRow, FirstCol), Cells(FirstRow, FirstCol)).Select
End Sub

[/vba]

пробовал макрос ставить на модуль книги, а на лист 1

Sub PressEnter()
With Application
.OnKey «{ENTER}», «AddRow»
End With
End Sub

и без With, и Private Sub ставил, но если вместо Private Sub AddRow() поставить Private Sub Worksheet_SelectionChange(ByVal Target As Range) то макрос работает но без конца добавляет строки
как же его запускать, нажимая Enter? я сдаюсь…

I have a userform in Excel that asks for a username and password. Once you enter your password if you press Enter it just «selects» the next item which is the LogIn button, but it doesn’t press it. You have to hit Enter again to actually press the button.

How can I make it so when the user presses enter on his keyboard the LogIn button is pressed and the code associated to is runs (Logincode_click)?

ZygD's user avatar

ZygD

21k39 gold badges77 silver badges98 bronze badges

asked Oct 1, 2013 at 20:24

user2385809's user avatar

2

You could also use the TextBox’s On Key Press event handler:

'Keycode for "Enter" is 13
Private Sub TextBox1_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 13 Then
         Logincode_Click
    End If
End Sub

Textbox1 is an example. Make sure you choose the textbox you want to refer to and also Logincode_Click is an example sub which you call (run) with this code. Make sure you refer to your preferred sub

Community's user avatar

answered Oct 1, 2013 at 21:56

Jacob D's user avatar

Jacob DJacob D

2192 silver badges5 bronze badges

9

Be sure to avoid «magic numbers» whenever possible, either by defining your own constants, or by using the built-in vbXXX constants.

In this instance we could use vbKeyReturn to indicate the enter key’s keycode (replacing YourInputControl and SubToBeCalled).

   Private Sub YourInputControl_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        If KeyCode = vbKeyReturn Then
             SubToBeCalled
        End If
   End Sub

This prevents a whole category of compatibility issues and simple typos, especially because VBA capitalizes identifiers for us.

Cheers!

answered Jun 29, 2015 at 20:28

drognisep's user avatar

drognisepdrognisep

5491 gold badge7 silver badges16 bronze badges

3

This one worked for me

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        If KeyCode = 13 Then
             Button1_Click
        End If
End Sub

answered Sep 9, 2014 at 13:35

Pepys's user avatar

PepysPepys

9817 gold badges16 silver badges34 bronze badges

Further to @Penn’s comment, and in case the link breaks, you can also achieve this by setting the Default property of the button to True (you can set this in the properties window, open by hitting F4)

That way whenever Return is hit, VBA knows to activate the button’s click event. Similarly setting the Cancel property of a button to True would cause that button’s click event to run whenever ESC key is hit (useful for gracefully exiting the Userform)


Source: Olivier Jacot-Descombes’s answer accessible here https://stackoverflow.com/a/22793040/6609896

Community's user avatar

answered Mar 22, 2017 at 12:51

Greedo's user avatar

GreedoGreedo

4,7892 gold badges29 silver badges76 bronze badges

Use the TextBox’s Exit event handler:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Logincode_Click  
End Sub

answered Oct 1, 2013 at 21:11

David Zemens's user avatar

David ZemensDavid Zemens

52.8k11 gold badges79 silver badges129 bronze badges

5

Here you can simply use:

SendKeys "{ENTER}" at the end of code linked to the Username field.

And so you can skip pressing ENTER Key once (one time).
And as a result, the next button («Log In» button here) will be activated. And when you press ENTER once (your desired outcome), It will run code which is linked with «Log In» button.

answered Aug 28, 2017 at 8:35

Sashidhar A's user avatar

Google должен предоставить мне достаточно примеров, но ни один из них, кажется, не работает

Что я хочу: каждый раз, когда пользователь нажимает, а затем отпускает, клавишу ENTER, чтобы моя программа сделала что-то (т. е. создайте MsgBox или вызовите функцию Foo). Я бы предпочел это в форме MWE

Что я сделал: я попытался погуглить его, но ни один из примеров не является функциональным. Они компилируются, но ничего не делают. Я также позаботился о сохранении в макросе совместимый формат Excel.

Что я использую: я использую Excel 2016, 64 бит с Office 365

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

EDIT 2: Вот MWE того, что у меня есть прямо сейчас, которое должно работать, но которое ничего не делает. Я добавляю это в рабочий лист, а не как модуль

Sub SomeActions()
MsgBox ("Hello")
End Sub

Private Sub Workbook_Open()
Application.OnKey "~", "SomeActions"
End Sub

Понравилась статья? Поделить с друзьями:
  • Макрос на удаление пустых ячеек в excel
  • Макрос на создание новой книги excel
  • Макрос на снятие защиты с листов excel
  • Макрос на сложение excel
  • Макрос на расчет excel