如何在Microsoft Office Excel 2013中启用/禁用行

时间:2015-09-17 13:33:54

标签: excel excel-vba vba

我有一个Excel工作表,其中包含,只需说3列(A,B,C)。
在从C列中选择内容之前,A列中的行将被禁用 C列有3个选项,我们只需说BIRDCATDOG
当我选择C列中的任何项目时,将启用Col A中的所有行。

B列中的行用于A列中行的长度验证。

我这样做是因为B栏中有一个公式可以验证A栏的长度。例如,如果我选择BIRD' B栏的公式将有一个规则,即长度应该只等于让我们说5。

在C栏中,我只需要从列表中选择任何项目。我希望这可以清除这种情况。

我该怎么做?

谢谢你们!

截图: enter image description here

1 个答案:

答案 0 :(得分:0)

不要锁定和解锁Column A,而应考虑根据C上的选择隐藏列。无论哪种方式,您都必须使用VBA,但随着更多逻辑进入工作表,使用隐藏和取消隐藏意味着更少的代码和更容易的下游工作。

在VBA中,单击正在进行此处的工作表。在此处输入以下内容:

Private Sub Worksheet_Change(ByVal Target As Range)
    'Check to see what changed. If it was "C1" then go ahead
    If Not (Intersect(Target, Range("C1")) Is Nothing) Then

        'If the value in C1 is "Bird" then unhide Column A
        If Target.Value = "Bird" Then
            Range("A").Hidden = False

        'Otherwise Hide column A
        Else
            Range("A").Hidden = True
        End If
    End If
End Sub

这里唯一令人困惑的部分是If Not(Intersect(Target...行。这里发生的是每次更改此选项卡时(如选项卡上的单元格更改),此宏将触发。然后它将测试以查看更改的单元格是否为C1 ...我们只是使用令人困惑的If Not(Intersect(Target...行来执行此操作,因为写VBA的人是虐待狂。

您也可以将其更改为锁定/解锁Column A。这将要求您从选项卡中删除保护,解锁Column A,然后重新保护选项卡。或者,如果需要锁定它:取消保护选项卡,锁定Column A,然后重新保护选项卡。您可以使用宏录制器记录自己,以查看代码,但您可以猜测它更加冗长,然后隐藏和取消隐藏。