单元格值和checkbox更改时更改工作表
我有一个工作簿与多个表。 我有一个包含多个用户选项的菜单页面(input新订单,更新订单等)。每个选项旁边都有一个checkbox,根据选中的checkbox,单元格F4:F21
从0
更改为1
,单元格B1
更改为我要去的工作表的名称。 我在主菜单工作表中有以下的VBA,但是当我点击一个checkbox时,什么都不会发生。 任何想法为什么?
码
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
单击checkbox不会激活事件Worksheet_Change
(请参阅此 )。 这就是为什么没有发生。
尝试更改其中一个单元格来查看效果。
我想你想要做的是分配一个行动到你的checkbox。 你可以用两种方法来做到这一点:
-
右键点击checkbox,并指定macros…
您必须创build相关的macros,这些macros可能包含您已经编写的代码的一部分,和/或调用您的子代码。 你可以带VBE(Alt + F11),在你的VBA项目中插入一个模块,然后编写你的
Sub
,例如,Sub CheckBox1_Click() MsgBox "Checkbox 1a has changed" End Sub
-
通过VBA(例如, 这个 )。 使用下面的示例代码,您将执行
InitCBs
,并将CheckBox1Change
与checkbox关联(它实际上为图中的两个checkbox分配操作;对于checkbox2的操作是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
你已经将sh
定义为一个String
。 由于没有名为“1”的工作表,因此您的代码将生成“下标超出范围”运行时错误。 尝试将sh
改为Long
。
Dim sh As Long