Excel:使用多个复选框使不同的行只读

时间:2016-02-29 10:03:42

标签: excel-vba vba excel

这是我在VBA的第一个程序。

我有一张excel表,其中包含多个问题,每个问题都有一个复选框,以使其可编辑或只读。

下面是一个例子

  1. 你拥有多少辆汽车?
  2. 你有多少张免费优惠券?
  3. 因此,引入两个复选框,使用它可以使它们只读或可编辑。

    所以我尝试了一个vba代码来做同样的事情(通过谷歌搜索)。以下是代码段。

    Private Sub CheckBox13_Click()
        If Sheet3.CheckBox13.Value = False Then
            Sheet3.Range("B20:CZ20").Interior.ColorIndex = 16
            Range("B20:CZ20").Locked = True
            ActiveSheet.Protect Contents:=True
        Else
            ActiveSheet.Protect Contents:=False
            Range("B20:CZ20").Locked = False
            Sheet3.Range("B20:CZ20").Interior.ColorIndex = 0
        End If
    End Sub
    
    Private Sub CheckBox14_Click() 'eigth question Hide check box code
        If Sheet3.CheckBox14.Value = False Then
            Sheet3.Range("B21:CZ21").Interior.ColorIndex = 16
            Range("B21:CZ21").Locked = True
            ActiveSheet.Protect Contents:=True
        Else
            ActiveSheet.Protect Contents:=False
            Range("B21:CZ21").Locked = False
            Sheet3.Range("B21:CZ21").Interior.ColorIndex = 0
        End If
    End Sub
    

    我的问题是:

    1. 默认情况下,这两行都是可编辑的,并且两个复选框均未选中
    2. 现在我检查第一个复选框,因此第一行颜色发生了变化 变得只读了。
    3. 现在我检查第二个复选框。得到错误。
    4.   

      错误1004,应用程序定义或对象定义错误。

      如果我错过了任何基本信息以便了解问题,请告诉我。

1 个答案:

答案 0 :(得分:0)

由于我们不知道问题出在哪里,我会尝试这样做:

Private Sub CheckBox13_Click()
    If Sheet3.CheckBox13.Value = False Then
        Sheet3.Protect Contents:=False
        Sheet3.Range("B21:CZ21").Locked = False
        Sheet3.Range("B20:CZ20").Interior.ColorIndex = 16
        Sheet3.Range("B20:CZ20").Locked = True
        Sheet3.Protect Contents:=True
    Else
        Sheet3.Protect Contents:=False
        Sheet3.Range("B20:CZ20").Locked = False
        Sheet3.Range("B20:CZ20").Interior.ColorIndex = 0
    End If
End Sub

Private Sub CheckBox14_Click()
    If Sheet3.CheckBox14.Value = False Then
        Sheet3.Protect Contents:=False
        Sheet3.Range("B21:CZ21").Locked = False
        Sheet3.Range("B21:CZ21").Interior.ColorIndex = 16
        Sheet3.Range("B21:CZ21").Locked = True
        Sheet3.Protect Contents:=True
    Else
        Sheet3.Protect Contents:=False
        Sheet3.Range("B21:CZ21").Locked = False
        Sheet3.Range("B21:CZ21").Interior.ColorIndex = 0
    End If
End Sub

详细信息:

  1. 我在你的范围之前添加了Sheet3(并且用Sheet3替换了ActiveSheet),你没有修改另一张。
  2. 我在修改范围颜色之前添加了ActiveSheet.Protect Contents:=False - Sheet3.Range("B21:CZ21").Locked = False,以确保范围不受保护。