У меня была такая же проблема, как и у вас, и я нашел решение, которое вы тоже можете использовать. Следующее изменено, чтобы соответствовать вашей конкретной проблеме.
Поместите это в код листа:
Private Sub Worksheet_Activate()
Dim sht As Worksheet
Set sht = ActiveWorkbook.Worksheets("Sheet1")
If Not Intersect(ActiveCell, sht.Range("A1:A10")) Is Nothing Then
ChangeKeys True
End If
End Sub
Private Sub Worksheet_Deactivate()
ChangeKeys False
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim sht As Worksheet
Set sht = ActiveWorkbook.Worksheets("Sheet1")
If Not Intersect(ActiveCell, sht.Range("A1:A10")) Is Nothing Then
ChangeKeys True
Else
ChangeKeys False
End If
End Sub
Поместите это в модуль:
Sub ChangeKeys(KeysChanged As Boolean)
If KeysChanged Then
'Add procedures to the keys
'Functions on numpad (http://help.adobe.com/en_US/AS2LCR/Flash_10.0/help.html?content=00000520.html)
Application.OnKey "{106}", "'KeyPress " & 42 & "'" 'Multiply *
Application.OnKey "{107}", "'KeyPress " & 43 & "'" 'Add +
Application.OnKey "{109}", "'KeyPress " & 45 & "'" 'Subtract -
Application.OnKey "{111}", "'KeyPress " & 47 & "'" 'Divide /
Else
'Reset the keys
'Functions on numpad (http://help.adobe.com/en_US/AS2LCR/Flash_10.0/help.html?content=00000520.html)
Application.OnKey "{106}" 'Multiply *
Application.OnKey "{107}" 'Add +
Application.OnKey "{109}" 'Subtract -
Application.OnKey "{111}" 'Divide /
End If
End Sub
Function KeyPress(the_key As Long)
Application.SendKeys "{F2}{" & Chr$(the_key) & "}"
End Function
Поведение нажатия клавиш изменяется для «+ - * /» (хотя в Excel 2013 кажется, что оно не работает для «/») при выборе ячейки в диапазоне («A1:A10») и изменяется обратно при выборе ячейки вне этого диапазона или активирует другой лист. Возможно, вы захотите сделать нечто подобное, когда деактивируете / активируете всю книгу.
С наилучшими пожеланиями,
Саймон