Excel VBA 用于激活部分代码的多个复选框

Excel VBA Multiple Checkboxes to activate parts of code

我正在处理的 VBA 代码目前正在一个工作表上一次性更新六个不同的数据 Table - 它删除密码保护,计算第一个数据 Table,对值进行硬编码并移至下一个值,然后再次将其全部锁定并说谢谢。

目标是拥有一个宏,该宏将 'separate' 处理单个数据 Table 的代码的六个部分,以仅更新这些数据 Table 的方式由用户选择的 s,同时保留单个代码(不是每个选项的单独子程序)并通过单个命令按钮激活整个过程。

为了实现这一点,除了编写实际代码之外,我还创建了一个用户窗体并插入了六个复选框和一个命令按钮,但在如何进一步处理这个问题上遇到了困难。我如何 activate/disable 部分代码基于选中的框?

所以在VBA中有事件监听器。这可以在工具栏下方编辑器的上部看到。向左下拉是对象。往右下拉是活动

一种快速的方法是查看用户窗体并双击该对象。这将根据操作为该对象创建一个 Private Sub。所以下面的代码是一个带有三个选项按钮的用户窗体。与你的逻辑相同,只需插入你需要的代码即可。

Private Sub OptionButton1_Click()
MsgBox "1"
End Sub

Private Sub OptionButton2_Click()
MsgBox "2"
End Sub

Private Sub OptionButton3_Click()
MsgBox "3"
End Sub

您还可以通过检查 .Value 属性 来检查是否选择了 OptionButton。在检查 运行 一些代码之后。

Private Sub CommandButton1_Click()
If UserForm1.OptionButton1.Value = True Then
    'Execute Code
ElseIf UserForm1.OptionButton2.Value = True Then
    'Execute Code
Else
    'Execute Code
End If
End Sub

模块 1 中的代码

Private Sub select_column_a()
    Range("A:A").Select
End Sub

在另一个子内部调用

Private Sub CommandButton1_Click()
    Module1.select_column_a
End Sub

@fscr 再次感谢您 - 就像一个魅力,加上一些补充,这就是为什么我在这里发帖是为了像我这样的其他初学者的利益。

在我插入 Sheet 的命令按钮中,sub 很简单:

Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

这显示了我的 UserForm1,其中包含所有复选框和一个显示 "Go"

的命令按钮

Go 按钮(也是 CommandButton1 - 那里没有冲突)里面有这个:

Private Sub CommandButton1_Click()
code
End Sub

其中 code 是存储在 Module1 中的我的代码名称(是的,我确实...)- 它可以顺利执行,无需任何单独的调用函数。这里的问题,是否存在向后兼容性问题?我在 Excel 2016 年工作,了解到例如 ISFORMULA 在这里是新的,并且在旧机器上抛出了问题。

然后整个代码开始

Sub code()
UserForm1.Hide

接着是各种操作,直到到达我的复选框,如上建议(有修正):

Application.Cursor = xlWait
Application.DisplayStatusBar = True
Application.StatusBar = "Calculating Sensitivities..."
Application.EnableCancelKey = xlDisabled

If UserForm1.CheckBox1.Value = True Then

Range("A6:G15").Select
Selection.Table ColumnInput:=Range("AD3") 
Application.Calculate
Range("B7:G15").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Application.CutCopyMode = False

ElseIf UserForm1.CheckBox2.Value = True Then

Range("AD17:AM26").Select
Selection.Table ColumnInput:=Range("AD2")
Application.Calculate
Range("AE18:AM26").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Application.CutCopyMode = False

等等

代码执行选中的剩余选项,然后是 End If 和其余代码(清理、锁定 Sheets 等),直到

Application.ScreenUpdating = True
Application.EnableCancelKey = xlEnabled
End Sub

全部没有任何错误。再次感谢!