【问题标题】:VBA - How to stop a sub with a key press, and resume again with another key pressVBA - 如何通过按键停止子程序,并通过另一个按键再次恢复
【发布时间】:2019-06-18 22:19:44
【问题描述】:

我目前在 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

【问题讨论】:

    标签: excel vba


    【解决方案1】:

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

    例如:

    在工作表代码隐藏中:

    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 this as TSomething

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多