单元格值和checkbox更改时更改工作表

我有一个工作簿与多个表。 我有一个包含多个用户选项的菜单页面(input新订单,更新订单等)。每个选项旁边都有一个checkbox,根据选中的checkbox,单元格F4:F210更改为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。 你可以用两种方法来做到这一点:

  1. 右键点击checkbox,并指定macros…

    在这里输入图像说明

    您必须创build相关的macros,这些macros可能包含您已经编写的代码的一部分,和/或调用您的子代码。 你可以带VBE(Alt + F11),在你的VBA项目中插入一个模块,然后编写你的Sub ,例如,

     Sub CheckBox1_Click() MsgBox "Checkbox 1a has changed" End Sub 
  2. 通过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