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
全部没有任何错误。再次感谢!
我正在处理的 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
全部没有任何错误。再次感谢!