태그 보관물: vba

vba

특정 셀 값에 따라 Excel 시트에서 행 표시 또는 숨기기 (Excel 2007 및 Windows 7) Then ‘Decoration Range A

다양한 표준 옵션에서 장식 선택을 지정하기 위해 스프레드 시트를 만들었습니다.

5 개의 개별 범위가 있으므로 이것이 첫 번째 선택이고 각 범위 내에 추가 선택이 있습니다.

그래서 시트의 시작 부분에서 ‘프레임’과 5 개의 ‘라디오 버튼’을 사용 했으며이 선택 사항을 cell에 연결했습니다 P1.

따라서이 선택을하면 다양한 행을 숨기고 첫 번째 선택과 관련된 선택 (범위 1과 관련된 10-19 행, 범위 2와 관련된 20-29 행) 만 표시하려고합니다.

아래는 ‘코드’이지만 라디오 버튼 선택을 변경할 때 아무것도하지 않습니다 ( P1예상대로 셀의 값이 변경되는 것을 볼 수 있습니다 ).

Sub HideShow()
'
' HideShow Macro
' Show only the selection pane assocated to the Design line selection


If Range("P1").Value = 1 Then  ‘Decoration Range A
        Rows("10:19").Select
        Selection.EntireRow.Hidden = False
        Rows("20:59").Select
        Selection.EntireRow.Hidden = True

ElseIf Range("P1").Value = 2 Then  'Decoration Range B
        Rows("10:19").Select
        Selection.EntireRow.Hidden = True
        Rows("20:29").Select
        Selection.EntireRow.Hidden = False
        Rows("30:59").Select
        Selection.EntireRow.Hidden = False

ElseIf Range("P1").Value = 3 Then  'Decoration Range C
        Rows("10:29").Select
        Selection.EntireRow.Hidden = True
        Rows("30:39").Select
        Selection.EntireRow.Hidden = False
        Rows("40:59").Select
        Selection.EntireRow.Hidden = False

ElseIf Range("P1").Value = 4 Then  'Decoration Range D
        Rows("10:39").Select
        Selection.EntireRow.Hidden = True
        Rows("40:49").Select
        Selection.EntireRow.Hidden = False
        Rows("50:59").Select
        Selection.EntireRow.Hidden = False

ElseIf Range("P1").Value = 5 Then  'Decoration Range E
        Rows("10:49").Select
        Selection.EntireRow.Hidden = True
        Rows("50:59").Select
        Selection.EntireRow.Hidden = False
End If


End Sub

나는 아마 최종 선택이 필요하지 않다는 것을 알고 있습니다 (A, B, C 또는 D가 아니라면 E 일 수 있음).

나는 또한 셀 값을 텍스트로 시도 ElseIf Range("P1").Value = "5" Then...했지만 기쁨도 없었습니다.

모든 지침에 감사드립니다.



답변

코드를 단일 선택 단추로 실행하려면 단일 선택 단추를 사용하여 매크로를 호출하거나 워크 시트 변경시 매크로를 개인용 하위 워크 시트 _change () 로 실행해야합니다.

코드 자체는 잘 작동합니다. 더 좋은 방법이 있지만 코드에는 아무런 문제가 없습니다.

작업중 인 시트의 VBA에 이것을 넣으십시오.

Private Sub worksheet_change(ByVal Target As Range)

'
' HideShow Macro
' Show only the selection pane assocated to the Design line selection

If Not Intersect(Target, Cells(1, 16)) Is Nothing Then

    If Range("P1").Value = 1 Then
        'Decoration Range A
        Rows("10:19").Select
        Selection.EntireRow.Hidden = False
        Rows("20:59").Select
        Selection.EntireRow.Hidden = True

    ElseIf Range("P1").Value = 2 Then  'Decoration Range B
        Rows("10:19").Select
        Selection.EntireRow.Hidden = True
        Rows("20:29").Select
        Selection.EntireRow.Hidden = False
        Rows("30:59").Select
        Selection.EntireRow.Hidden = False

    ElseIf Range("P1").Value = 3 Then  'Decoration Range C
        Rows("10:29").Select
        Selection.EntireRow.Hidden = True
        Rows("30:39").Select
        Selection.EntireRow.Hidden = False
        Rows("40:59").Select
        Selection.EntireRow.Hidden = False

    ElseIf Range("P1").Value = 4 Then  'Decoration Range D
        Rows("10:39").Select
        Selection.EntireRow.Hidden = True
        Rows("40:49").Select
        Selection.EntireRow.Hidden = False
        Rows("50:59").Select
        Selection.EntireRow.Hidden = False

    ElseIf Range("P1").Value = 5 Then  'Decoration Range E
        Rows("10:49").Select
        Selection.EntireRow.Hidden = True
        Rows("50:59").Select
        Selection.EntireRow.Hidden = False
    End If

End If

End Sub

그러나 나는 이렇게 할 것입니다 :

Private Sub worksheet_change(ByVal Target As Range)

'
' HideShow Macro
' Show only the selection pane assocated to the Design line selection

If Not Intersect(Target, Range("p1")) Is Nothing Then
    On Error Resume Next
    ActiveSheet.Cells.EntireRow.Hidden = False

    If Range("P1") = 1 Then 'Decoration Range A
        Rows("20:59").Hidden = True

    ElseIf Range("P1") = 2 Then  'Decoration Range B
        Rows("10:19").Hidden = True

    ElseIf Range("P1") = 3 Then  'Decoration Range C
        Rows("10:29").Hidden = True

    ElseIf Range("P1") = 4 Then  'Decoration Range D
        Rows("10:39").Hidden = True

    ElseIf Range("P1") = 5 Then  'Decoration Range E
        Rows("10:49").Hidden = True

    End If

End If

End Sub


답변