Оператор Case - скрытие / отображение на основе условного значения - PullRequest
2 голосов
/ 23 марта 2019

Я пытаюсь скрыть столбец, если значение регистра - нет.

Я сохранил это на листе, а не в модуле.

Private Sub Worksheet_Change(ByVal Target As Range)

    ActiveSheet.Activate

    If Not Application.Intersect(Range("C9"), Range(Target.Address)) Is     Nothing Then
        Select Case Target.Value
           Case Is = "Yes":
              Rows("10:10").EntireRow.Hidden = False
           Case Is = "No":
              Rows("10:10").EntireRow.Hidden = True
        End Select

    End If
End Sub

Ответы [ 2 ]

0 голосов
/ 23 марта 2019

Событие расчета листа

  • Рабочая тетрадь Скачать (Dropbox)
  • Если Yes и No изменяются по формуле, событие Worksheet Change не будет вызываться при изменении значения.
  • Скопируйте первый код в стандартный модуль , например. Module1 (VBE >> Вставка >> Модуль).
  • Скопируйте второй код в листовой модуль , например. Sheet1.
  • Скопируйте третий код в Модуль ThisWorkbook .

Module1

Option Explicit

Public strYesNo As String

Sub YesNo(CellRange As Range, HideRow As Long)

    Const str1 As String = "Yes"
    Const str2 As String = "No"

    With CellRange
        If .Value <> strYesNo Then
            Select Case strYesNo
                Case str1
                    .Worksheet.Rows(HideRow).Hidden = False
                Case str2
                    .Worksheet.Rows(HideRow).Hidden = True
            End Select
            strYesNo = .Value
        End If
    End With

End Sub

Sub YesNo1()

    Const cSheet As Variant = "Sheet1"
    Const cRange As String = "C9"
    Const cCol As Long = 10

    YesNo ThisWorkbook.Worksheets(cSheet).Range(cRange), cCol

End Sub

Лист1

Option Explicit

Private Sub Worksheet_Calculate()
    YesNo1
End Sub

ThisWorkbook

Option Explicit

Private Sub Workbook_Open()
    YesNo1
End Sub
0 голосов
/ 23 марта 2019

Возможно, это связано с чувствительной к регистру ошибкой проверки.Попробуйте этот код и сообщите нам, если это решит проблему:

Private Sub Worksheet_Change(ByVal Target As Range)

    ActiveSheet.Activate

    If Not Application.Intersect(Range("C9"), Range(Target.Address)) Is Nothing Then
        Select Case LCase(Target.Value)
            Case Is = "yes":
                Rows("10:10").EntireRow.Hidden = False
            Case Is = "no":
                Rows("10:10").EntireRow.Hidden = True
        End Select
    End If

End Sub

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...