2016-07-27 8 views
1

Google должен предоставить мне с достаточно примеров, но ни один из них не похоже на работуКак вызвать функцию ВВОД в Excel с помощью VBA

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

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

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

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

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

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

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

Нажмите «Ввод», где? Рабочий лист? UserForm? Немного больше деталей поможет :) –

+0

Помогает ли это? Http: // StackOverflow.com/questions/11153995/is-there-any-event-that-fire-when-keys-are-press-when-editing-a-cell –

+1

Или [это] (http://stackoverflow.com/questions/21453681/can-i-capture-and-emulate-a-keydown-event-in-excel-vba) ... старый ответ @SiddharthRout. –

ответ

1

Во-первых, сделать обратный вызов Sub, который выполняет логику вам нужно. Поместите его в новый код модуля (не в рабочий лист кода):

Sub SomeActions() 
... 
End Sub 

Затем подписаться на OnKey событие, например, когда пользователь открывает книгу (этот код переходит в ThisWorkbook) модуль в редакторе VBA:

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

"~" означает Введите ключ. Для цифровой клавиатуры используйте "{ENTER}".

+0

Я пробовал, но это не сработает. Я скопирую вставить то, что у меня есть, в мой вопрос. – puk

+0

OK какой-то прогресс ... когда я помещал его в 'ThisWorkbook', он генерирует ошибку времени выполнения, которая читает« не удается запустить макрос ... макрос может быть недоступен в этой книге или все макросы могут быть отключены » – puk

+0

Проверить если Sub, на который вы подписаны, на самом деле является одним (т.е. 'SomeActions'). Также он должен быть в модуле, а не в коде рабочего листа (см. Править). – Taosique

1

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

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

На листе кода листа:

Option Explicit 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If Target.Count > 1 Then Exit Sub 
    Application.EnableEvents = False 
    Dim r As Long, c As Long 
    If Target.Row/2 <> Int(Target.Row/2) Then r = 1 
    If Target.Column/2 <> Int(Target.Column/2) Then c = 1 
    Target.Offset(r, c).Activate 
    Application.EnableEvents = True 
End Sub 

Это происходит для всей навигации. Если вы хотите, чтобы это происходило на входе, измените его в соответствии с макросом события Worksheet_Change вместо макроса события Worksheet_SelectionChange.