Скрытие строк на основе значения ячейки на другом листе - PullRequest
1 голос
/ 08 мая 2020

Я использую код VBA, чтобы скрыть некоторые строки на основе значения ячейки:

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Activate
If Not Application.Intersect(Range("K3"), Range(Target.Address)) Is Nothing Then
        Select Case Target.Value
        Case Is = "Full_FC_powered":        Rows("33:33").EntireRow.Hidden = True
                                            Rows("37:38").EntireRow.Hidden = True
                                            Rows("45:46").EntireRow.Hidden = True
        Case Is = "FC_for_hotel":           Rows("33:33").EntireRow.Hidden = False
                                            Rows("37:38").EntireRow.Hidden = False
                                            Rows("45:46").EntireRow.Hidden = False
        Case Is = "DG_for_transit":         Rows("33:33").EntireRow.Hidden = False
                                            Rows("37:38").EntireRow.Hidden = False
                                            Rows("45:46").EntireRow.Hidden = False
        End Select
End If
End Sub

Сам код уже работает, но есть один недостаток: значение 'K3' связано с другим листом где он рассчитывается. Однако если значение K3 изменится на другом листе, код VBA не будет работать автоматически. Сначала мне нужно go в ячейку K3 и нажать Enter.

Мой вопрос: есть ли способ связать этот код напрямую с другим листом или обновить sh этот код, когда значения ячейки изменить?

Заранее спасибо

1 Ответ

0 голосов
/ 08 мая 2020

Single Cell Worksheet_Calculate

Ячейка I3 используется вместо ячейки на другом листе, то есть формула в K3: =I3.

enter image description here

введите описание изображения здесь

enter image description here

введите описание изображения здесь

Для правильной работы необходимо использовать все три кода. Отрегулируйте Sheet1 дюйм Public Const TargetSheet As String = "Sheet1" соответствующим образом.

Стандартный код модуля, например, Module1

Option Explicit

Public TargetValue As String
Public Const TargetCell As String = "K3"
Public Const TargetSheet As String = "Sheet1"

Sub HideShowRows(Sheet As Worksheet)
    Dim rng As Range
    With Sheet
        Set rng = Union(.Rows("33"), .Rows("37:38"), .Rows("45:46"))
        Select Case .Range(TargetCell).Value
            Case "Full_FC_powered": rng.EntireRow.Hidden = True
            Case "FC_for_hotel", "DG_for_transit": rng.EntireRow.Hidden = False
        End Select
        TargetValue = .Range(TargetCell).Value
    End With
End Sub

Код ThisWorkbook

Option Explicit

Private Sub Workbook_Open()
    TargetValue = Worksheets(TargetSheet).Range(TargetCell).Value
    HideShowRows Worksheets(TargetSheet)
End Sub

Код листа, например Sheet1

Option Explicit

Private Sub Worksheet_Calculate()
    If Range(TargetCell).Value <> TargetValue Then
        HideShowRows Me
    End If
End Sub

' The following in this case are the same:

'    If Range(TargetCell).Value <> TargetValue Then
'        HideShowRows Me
'    End If

'    If Worksheets(TargetSheet).Range(TargetCell).Value <> TargetValue Then
'        HideShowRows Worksheet(TargetSheet)
'    End If
...