多个if中的多个目标,具体取决于另一个VBA

时间:2019-03-28 11:38:39

标签: excel vba if-statement target

我有一个数据表,其中需要根据在不同单元格集中设置的条件隐藏行集。 我写的东西基本上是“洞穴人编码”,当然不起作用:)

我已经创建了if并试图将if放入ifs中,但是这段代码实际上什么也没发生。

我只写了2行,但大约有30种不同的行(尚未写)

Sub Worksheet_Change(ByVal Target As Range)
Set Target = Range(Cells(7, 8), Cells(7, 8))
Set Target1 = Range(Cells(3, 2), Cells(3, 2))
    If Target.Value = "No"
        Rows("8:29").EntireRow.Hidden = True
        If Target.Value = "Yes" And Target1.Value = "Half" Then
            Rows("22:29").EntireRow.Hidden = True
        ElseIf Target.Value = "Yes" And Target1.Value = "Full" Then
            Rows("8:29").EntireRow.Hidden = False
        End If
    End If

Set Target = Range(Cells(30, 8), Cells(30, 8))
Set Target1 = Range(Cells(3, 2), Cells(3, 2))
    If Target.Value = "No"
        Rows("31:56").EntireRow.Hidden = True
        If Target.Value = "Yes" And Target1.Value = "Half" Then
            Rows("47:56").EntireRow.Hidden = True
        ElseIf Target.Value = "Yes" And Target1.Value = "Full" Then
            Rows("31:56").EntireRow.Hidden = False
        End If
    End If
End Sub

因此,在简短的摘要中,我在单元格B3中有两个变量(半和全)

以及在指定单元格(例如H7,H30等)的H行中,是/否选项。 第7、30行(任意行,具有“是/否”选项)是主题的标题 包括从8到29的该主题的详细信息。

如果H7(H30 ...)为否-应该隐藏所有详细信息(第8-29行;第31-56行,依此类推)-B3中的Valua没关系。 如果H7(H30 ...)是,则B3中的值很重要: 如果H7(H30 ...)是,B3是一半-在这种情况下,第22-29行隐藏(47-56等)不隐藏 如果H7(H30 ...)为“是”且B3已满-未隐藏第8-29行。

希望我解释得很好。

请帮助我改进代码,以便能够设定目标。

1 个答案:

答案 0 :(得分:0)

您的if语句以及 elseif

中都缺少 then

以下是适合您的代码:

Sub Worksheet_Change(ByVal Target As Range)

Set Target1 = Range(Cells(3, 2), Cells(3, 2))

' ------------

Set Target = Range(Cells(7, 8), Cells(7, 8))

If Target.Value = "No" Then
    Rows("8:29").EntireRow.Hidden = True
  ElseIf Target.Value = "Yes" And Target1.Value = "Half" Then
    Rows("22:29").EntireRow.Hidden = True
  ElseIf Target.Value = "Yes" And Target1.Value = "Full" Then
    Rows("8:29").EntireRow.Hidden = False
End If

' ------------

Set Target = Range(Cells(30, 8), Cells(30, 8))

If Target.Value = "No" Then
    Rows("31:56").EntireRow.Hidden = True
  ElseIf Target.Value = "Yes" And Target1.Value = "Half" Then
    Rows("47:56").EntireRow.Hidden = True
  ElseIf Target.Value = "Yes" And Target1.Value = "Full" Then
    Rows("31:56").EntireRow.Hidden = False
End If

End Sub

由于 Target1 范围引用不会更改,因此您无需在代码中重复设置它。