2016-10-12 3 views
0

Я использую Application.OnKey в Excel 2013, чтобы изменить поведение определенной строки, когда нажаты клавиши , x и z.Disable Application.OnKey поведение Excel 2013

Мой код ниже:

В модуле:

Public Sub SetOnKey() 
    Application.OnKey "x", "Macro1" 
    Application.OnKey "c", "Macro2" 
    Application.OnKey "z", "Macro3" 
End Sub 

Public Sub UnsetOnKey() 
    Application.OnKey "x" 
    Application.OnKey "c" 
    Application.OnKey "z" 
End Sub 

Public Sub MoveCellSelectorToRight() 
    ' Move cell selector to the right 
    Cells(ActiveCell.Row, ActiveCell.Column + 1).Select 
End Sub 

Public Sub Macro1() 
    ActiveCell.Value = "r" 
    MoveCellSelectorToRight 
End Sub 

Public Sub Macro2() 
    ActiveCell.Value = "t" 
    MoveCellSelectorToRight 
End Sub 

Public Sub Macro3() 
    ActiveCell.Value = "o" 
    MoveCellSelectorToRight 
End Sub 

В моей книге:

Public Sub Workbook_SheetChange(ByVal Sh As Object, _ 
ByVal Source As Range) 

    SetOnKey 
    If Not Source.Row = 6 Then UnsetOnKey 
End Sub 

Если я не в строке 6, SetOnKey все еще выполняется. Как я могу предотвратить это?

+0

Я думаю, что вы хотите использовать ['SelectionChange'] (https://msdn.microsoft.com/en-us/ библиотека/офис/ff194470.aspx). – Phylogenesis

ответ

0

Вам нужно, чтобы получить IF-Logic право:

If Not Source.Row = 6 Then 
    UnsetOnKey 
Else 
    SetOnKey 
End If 
+0

Я уже пробовал это. Я решил это, используя событие SelectionChange, как сказал @Phylogenesis. –

+0

ваш код чище, но эквивалентен. Лучше даже без «не» ;-) – Pierre

0

это изменение рабочего листа вы использовали, не SelectionChange ... Я проверил, то UnsetOnKey отлично работает для меня. Однако простейшим является проверка непосредственно в коде, который выбран и выбрана ячейка