2017-10-04 67 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