Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-如何用一次按键停止sub,然后用另一次按键再次继续_Excel_Vba - Fatal编程技术网

Excel VBA-如何用一次按键停止sub,然后用另一次按键再次继续

Excel VBA-如何用一次按键停止sub,然后用另一次按键再次继续,excel,vba,Excel,Vba,我当前在Sheet对象中有一个子对象,它根据所选的单元格请求输入一个数字,或者自动引用不同的工作簿并从中粘贴一个值。假设输入了一个错误的号码。我正在尝试创建另一个进程或子进程,允许用户选择要编辑的单元格,而无需通过按一个键(比如esc键)来“暂停”另一个子进程而弹出自动提示或数字。修改完成后,用户应能通过再次按同一个键来恢复“自动子进程” 我查看了keypress和keydown活动,但我只看到一次有效的方法 'some pseudocode to explain my method 'Work

我当前在Sheet对象中有一个子对象,它根据所选的单元格请求输入一个数字,或者自动引用不同的工作簿并从中粘贴一个值。假设输入了一个错误的号码。我正在尝试创建另一个进程或子进程,允许用户选择要编辑的单元格,而无需通过按一个键(比如esc键)来“暂停”另一个子进程而弹出自动提示或数字。修改完成后,用户应能通过再次按同一个键来恢复“自动子进程”

我查看了keypress和keydown活动,但我只看到一次有效的方法

'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

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

例如:

在工作表Codebehind中:

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
选项显式
公共子TogleAutoEdit()