2017-10-04 70 views
0

修订与移动触发细胞Worksheet_Change宏

我需要显示或隐藏基于答案片中的问题,工作表中。如果答案是“是”,则显示表单。如果“否”,然后隐藏它。所以这部分很容易...

现在,这个问题可能存在多次在工作表上。如果对任何问题的回答都是“是”,则显示表单;如果所有答案都是“否”,则隐藏表格。假设问题和答案总是在相同的地方,这将是很容易,以及...

在哪里我迷路了,问题和答案单元格可能真的几乎在工作表内的任何地方,也可能发生无限次数(可能永远不会超过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 

此代码除如果答案为“是”对任何的一切我需要该工作表可见的问题。此代码仅基于最近的答案...

+0

您如何识别哪些细胞在纸张上包含感兴趣的问题? –

+0

问题是“补充担保?”我使用Cells.Find ...来找到问题,然后OFFSET(0,1),这将我带到答案。每次我改变答案时,都会触发宏运行。 –

+0

为什么不直接检查'Target'(获得更改的单元格)是否/否单元格,并将问题留在左侧......这种方式只会更改单元格(它也会更快)? ? –

回答

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