单元格值和复选框更改时更改工作表

时间:2013-12-04 14:26:08

标签: excel excel-vba user-controls vba

我有一个包含多个表格的工作簿。我有一个菜单页面(工作表),有多个用户选择(输入新订单,更新订单等)。每个选项旁边都有一个复选框,根据选中的复选框,单元格F4:F2101,并且,单元格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 

2 个答案:

答案 0 :(得分:1)

单击复选框不会激活事件Worksheet_Change(请参阅this)。这就是为什么没有发生的原因。

尝试更改其中一个单元格以查看效果。

我认为您要做的是为您的复选框分配一个操作。您可以通过两种方式执行此操作:

  1. 右键单击复选框,然后指定宏...

    enter image description here

    您必须创建关联的宏,该宏可能包含您已编写的部分代码,和/或对您拥有的子代码的调用。您可以带上VBE(Alt + F11),在VBA项目中插入一个模块,然后编写Sub,例如,

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