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

질문은 "Additional Collateral?"입니다. 나는 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