带有移动触发器单元格的Worksheet_Change宏

时间:2017-10-04 17:00:30

标签: vba excel-vba loops find excel

已更新

我需要根据表格中问题的答案显示或隐藏工作表。如果答案为“是”,则显示表格。如果“否”,则隐藏它。那部分很容易......

现在,这个问题可能会在工作表上多次出现。如果对于任何问题,问题的答案为“是”,则显示表格;如果所有答案都是“否”,则隐藏表格。假设问题和答案总是位于同一个地方,那也很容易......

我丢失的地方是,问题和答案单元格几乎可以在工作表中的任何位置,也可能无数次发生(可能永远不会超过10 ......但它可能)。

所以我需要的是一个找到问题的代码OFFSETS(0,1),然后触发宏,如果它等于target.address。我可以第一次在工作表中出现问题,但是如果我进一步回答这个问题,我就无法触发宏。

我现在就在这里:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Value = "Yes" Then
    If Target.Offset(0, -3).Value = "Additional Collateral?" Then
        Coll
    Else
        Exit Sub
    End If
ElseIf Target.Value = "No" Then
    If Target.Offset(0, -3).Value = "Additional Collateral?" Then
        Coll
    Else
        Exit Sub
    End If
Else
    Exit Sub
End If

End Sub

**

Sub Coll()

If ActiveCell.Value = "Yes" Then
Sheets("Additional Collateral").Visible = True
Exit Sub
Else
Sheets("Additional Collateral").Visible = xlVeryHidden
End If

End Sub

此代码执行所有操作,但如果任何“附加抵押品”的答案为“是”,则除外。问题我需要让工作表可见。此代码仅基于最新答案...

1 个答案:

答案 0 :(得分:1)

以下代码适用于我的目的。

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Value = "Yes" Then
    If Target.Offset(0, -3).Value = "Additional Collateral?" Then
        Coll
    Else
        Exit Sub
    End If
ElseIf Target.Value = "No" Then
    If Target.Offset(0, -3).Value = "Additional Collateral?" Then
        Coll
    Else
        Exit Sub
    End If
Else
    Exit Sub
End If

End Sub

**

Sub Coll()

Dim r As Range, cell As Range

Set r = Range("$X$1:X$1000")

For Each cell In r
    If cell.Value = "Yes" Then
        Sheets("Additional Collateral").Visible = True
        Exit Sub
    Else
        Sheets("Additional Collateral").Visible = xlVeryHidden
    End If
Next

End Sub