Запуск VBA, установленного в ячейке формулы - PullRequest
0 голосов
/ 05 мая 2020
• 1000 на основе, и я пробовал несколько способов, но я не добился успеха и не могу заставить его обновить sh и запустить VBA. Я действительно не хочу или не нуждаюсь в том, чтобы конечный пользователь щелкал по любым ненужным полям - любой совет будет очень признателен.
 Private Sub Worksheet_Change(ByVal Target As Range)
 ActiveSheet.Activate
 Application.ScreenUpdating = False

 On Error Resume Next
 If Not Application.Intersect(Range("G20"), Range(Target.Address)) Is Nothing Then
    Select Case Target.Value

    Case Is = "0":
    Rows("27:64").EntireRow.Hidden = True


    End Select

    End If

    If Not Application.Intersect(Range("G20"), Range(Target.Address)) Is Nothing Then
    Select Case Target.Value

    Case Is = "1":
                        Rows("27:29").EntireRow.Hidden = False
                        Rows("31:42").EntireRow.Hidden = False
                        Rows("52:64").EntireRow.Hidden = False
                        Rows("43:45").EntireRow.Hidden = True
                        Rows("46:51").EntireRow.Hidden = True
                        Rows("30:30").EntireRow.Hidden = True
    End Select

   If
   On Error Resume Next
   If Not Application.Intersect(Range("G20"), Range(Target.Address)) Is Nothing Then
    Select Case Target.Value

    Case Is = "2":
                        Rows("27:29").EntireRow.Hidden = False
                        Rows("31:45").EntireRow.Hidden = False
                        Rows("52:64").EntireRow.Hidden = False
                        Rows("46:51").EntireRow.Hidden = True
                        Rows("30:30").EntireRow.Hidden = True
    End Select

  End If
  On Error Resume Next
  If Not Application.Intersect(Range("G20"), Range(Target.Address)) Is Nothing Then
    Select Case Target.Value

    Case Is = "3":
                        Rows("27:31").EntireRow.Hidden = False
                        Rows("31:42").EntireRow.Hidden = False
                        Rows("46:51").EntireRow.Hidden = False
                        Rows("43:45").EntireRow.Hidden = True
    End Select

 End If
 On Error Resume Next
  If Not Application.Intersect(Range("G20"), Range(Target.Address)) Is Nothing Then
    Select Case Target.Value

    Case Is = "4":
                        Rows("27:31").EntireRow.Hidden = False
                        Rows("32:45").EntireRow.Hidden = True
                        Rows("52:64").EntireRow.Hidden = True
                        Rows("46:51").EntireRow.Hidden = False
    End Select

 End If

 On Error Resume Next
 If Not Application.Intersect(Range("G20"), Range(Target.Address)) Is Nothing Then
    Select Case Target.Value

    Case Is = "5":
     Rows("27:64").EntireRow.Hidden = False
    End Select

End If

Application.ScreenUpdating = True
End Sub

1 Ответ

1 голос
/ 05 мая 2020

Я предполагаю, что вы проверяете ячейку G20, чтобы скрыть / показать строки. Итак, мы собираемся сделать это:

Сначала измените код в вашем объекте рабочего листа для этого:

Option Explicit
Private Sub Worksheet_Calculate()

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With

    HideRows Me.Range("G20"), Me

    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With

End Sub

Это вызовет другую процедуру, которая будет содержаться в таком модуле:

Option Explicit
Sub HideRows(CellValue As Long, ws As Worksheet)

    With ws
        Select Case CellValue
            Case 0
                .Rows("27:64").EntireRow.Hidden = True
            Case 1
                .Rows("27:29").EntireRow.Hidden = False
                .Rows("31:42").EntireRow.Hidden = False
                .Rows("52:64").EntireRow.Hidden = False
                .Rows("43:45").EntireRow.Hidden = True
                .Rows("46:51").EntireRow.Hidden = True
                .Rows("30:30").EntireRow.Hidden = True
            Case 2
                .Rows("27:29").EntireRow.Hidden = False
                .Rows("31:45").EntireRow.Hidden = False
                .Rows("52:64").EntireRow.Hidden = False
                .Rows("46:51").EntireRow.Hidden = True
                .Rows("30:30").EntireRow.Hidden = True
            Case 3
                .Rows("27:31").EntireRow.Hidden = False
                .Rows("31:42").EntireRow.Hidden = False
                .Rows("46:51").EntireRow.Hidden = False
                .Rows("43:45").EntireRow.Hidden = True
            Case 4
                .Rows("27:31").EntireRow.Hidden = False
                .Rows("32:45").EntireRow.Hidden = True
                .Rows("52:64").EntireRow.Hidden = True
                .Rows("46:51").EntireRow.Hidden = False
            Case 5
                .Rows("27:64").EntireRow.Hidden = False
        End Select
    End With

End Sub

Таким образом, вы можете использовать код для нескольких листов, если они построены одинаково, вам нужно будет только скопировать код из объекта листа на другие листы, и он вызовет HideRows, который затем будет скрывать / отображать строки в зависимости от значения ячейки G20, вы можете изменить цель на каждом листе.

А что касается использования Select Case, вы можете видеть, что вам нужен только один со всеми Ваши чемоданы по стоимости.

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