VBA-如何通过按键停止子菜单,然后再次按键再次恢复

时间:2019-06-18 13:34:04

标签: excel vba

我目前在Sheet对象中有一个子对象,根据选择的是哪个单元格,它要求输入一个数字,或者自动引用另一个工作簿并从那里粘贴一个值。假设输入了错误的数字。我正在尝试创建另一个进程或子程序,该程序或子程序允许用户选择要编辑的单元格,而不会通过按下某个键(让您说出esc键)来“暂停”另一个子程序而弹出自动提示或数字。修改完成后,用户应该可以通过再次按下相同的键来恢复“自动子”。

我研究了按键和按键动作,但是我只看到一次有效的方法。

'some pseudocode to explain my method
'Working code that prompts or gets values depending on which cell is being selected
Public Sub Worksheet_SelectionChange(ByVal Target As Range)
   ...
End Sub

'Sub to allow for previous sub to paused/resumed
Sub
   'if esc is clicked, pause the selectionChange sub.
   'if esc is clicked again, resume the selctionChange sub.
End Sub

1 个答案:

答案 0 :(得分:1)

您可以设置一个Toggle来打开和关闭该功能。 可以通过单独的宏调用来调用该切换。

例如:

在后面的工作表代码中:

Option Explicit

Private Type TSheet1
    autoEditOn As Boolean 'toggle
End Type
Private this As TSheet1

Public Property Get autoEditOn() As Boolean
    autoEditOn = this.autoEditOn
End Property
Public Property Let autoEditOn(value As Boolean)
    this.autoEditOn = value
End Property

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If autoEditOn Then doStuff ' only tun if toggle is true
End Sub


Private Sub doStuff()
    'Do something ' do  stuff in a seperate sub/function, keeps the code clean
End Sub

在名为MacroHook的单独模块中:

Option Explicit

Public Sub toggleAutoEdit() '<-- Call this function with a key-combo
    With Sheet1
        .autoEditOn = Not .autoEditOn
    End With
End Sub

还有其他方法可以做到这一点,但我认为这是最干净的方法之一。

此处将解释private Type事物:Private this as TSomething