我有一个包含多个表格的工作簿。我有一个菜单页面(工作表),有多个用户选择(输入新订单,更新订单等)。每个选项旁边都有一个复选框,根据选中的复选框,单元格F4:F21
从0
到1
,并且,单元格B1
更改了我想要去的工作表的名称。我在主菜单工作表中有以下VBA但是当我单击一个复选框时,没有任何反应。有什么想法吗?
CODE
Private Sub Worksheet_Activate()
ClearMenuForm
End Sub
Private Sub Worksheet_Change (ByVal Target As Range)
Dim sh As String
If Not Intersect(Target, Range("F4:F21")) Is Nothing Then
sh = Cells(1, "B").Value
Sheets(sh).Select
End If
End Sub
答案 0 :(得分:1)
单击复选框不会激活事件Worksheet_Change
(请参阅this)。这就是为什么没有发生的原因。
尝试更改其中一个单元格以查看效果。
我认为您要做的是为您的复选框分配一个操作。您可以通过两种方式执行此操作:
右键单击复选框,然后指定宏...
您必须创建关联的宏,该宏可能包含您已编写的部分代码,和/或对您拥有的子代码的调用。您可以带上VBE(Alt + F11),在VBA项目中插入一个模块,然后编写Sub
,例如,
Sub CheckBox1_Click()
MsgBox "Checkbox 1a has changed"
End Sub
通过VBA(例如this)。使用下面的示例代码,您将执行InitCBs
,这会将CheckBox1Change
与复选框相关联(它实际上为图中的两个复选框分配操作;复选框2的操作为CheckBox2Change
) 。您也可以在打开文件时设置InitCBs
。
Sub CheckBox1Change()
MsgBox "Checkbox 1b has changed"
End Sub
Sub InitCBs()
Dim cb As CheckBox
For Each cb In ActiveSheet.CheckBoxes
With cb
Dim action As String
'action = "CheckboxChange"
action = Replace(cb.Name, " ", "") & "Change"
.OnAction = action
End With
Next cb
End Sub
答案 1 :(得分:0)
您已将sh
定义为String
。例如,由于没有名为“1”的工作表,因此您的代码将生成“下标超出范围”运行时错误。尝试将sh
更改为Long
。
Dim sh As Long