Запуск макроса рабочего листа по щелчку рабочего листа - PullRequest
0 голосов
/ 15 октября 2018

Я написал следующий макрос: где ячейка e3 заполняется по формуле и может изменять значение.Однако, чтобы этот макрос работал, я должен нажать клавишу ввода в e3, чтобы вызвать его.Я хочу вызвать этот макрос, когда нажимаю на вкладку, в которой он называется «спецификацией объекта», и считаю, что мне нужен второй макрос для его запуска.Я пробовал макрос (внизу называется второй макрос), но это не сработало.

Может кто-нибудь помочь, пожалуйста.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("E3")) Is Nothing Then
If UCase$(Range("E3").Value) = "DWW" Then
    Rows("6:47").EntireRow.Hidden = False 'if "DWW" is entered in E3, rows 
are visible
Else
    Rows("6:47").EntireRow.Hidden = True 'if anything other than "DWW" is  
entered in E3 or E3 is blank, the rows are hidden
End If
End If


If Not Intersect(Target, Range("E3")) Is Nothing Then
If UCase$(Range("E3").Value) = "THETIS" Then
    Rows("48:70").EntireRow.Hidden = False 'if "Thetis" is entered in E3, 
rows are visible
Else
    Rows("48:70").EntireRow.Hidden = True 'if anything other than "Thetis" 
is  entered in E3 or E3 is blank, the rows are hidden
End If
End If

If Not Intersect(Target, Range("E3")) Is Nothing Then
If Range("E3").Value = "" Then
    Rows("71:75").EntireRow.Hidden = False 'if "DWW" is entered in E3, rows 
are visible
Else
    Rows("71:75").EntireRow.Hidden = True 'if anything other than "THETIS" 
is  entered in E3 or E3 is blank, the rows are hidden
End If
End If
   End Sub

 'second macro
 private sub SecondMacro()
 call Worksheet_change
end sub

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

Обратите внимание, что здесь можно использовать 3 различных события

  1. Worksheet_Activate()
    запускается, если рабочий лист активирован (если вы переключаетесь с другого листа на этот лист).

  2. Worksheet_Change(ByVal Target As Range)
    выполняется при изменении значения в ячейке.

  3. Worksheet_SelectionChange(ByVal Target As Range)
    выполняется при выборе другогоячейка

Таким образом, вы можете решить, какое событие подходит вам больше всего.

0 голосов
/ 15 октября 2018

Когда я читаю ваш макрос, кажется, что вы хотите, чтобы определенные строки автоматически скрывались в зависимости от изменения значения ячейки E3.Если это правильно, то я думаю, что следующая замена вашему коду будет работать:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("E3")) Is Nothing Then checkE3
End Sub

Sub checkE3()
    Dim E3val As String
    E3val = UCase$(Range("E3").Value)
    Rows("6:47").EntireRow.Hidden = Not (E3val = "DWW")
    Rows("48:70").EntireRow.Hidden = Not (E3val = "THETIS")
    Rows("71:75").EntireRow.Hidden = Not (E3val = "")
End Sub

Это сработает, если значение E3 изменится из-за того, что пользователь сам изменил его , но не если в E3 есть формула, которая при пересчете вызывает изменение.

В этом случае вы можете запустить checkE3 для других событий, таких как Worksheet_Calculate().Это может привести к тому, что он будет выполняться гораздо чаще, чем вам нужно, в основном каждый раз, когда выполняется перерасчет, но ресурс, используемый в checkE3, очень мал, поэтому вы вряд ли увидите какие-либо проблемы, если нет много расчета продолжается.

Private Sub Worksheet_Calculate()
    checkE3
End Sub
0 голосов
/ 15 октября 2018

Вы ищете метод Worksheet_Activate.Это будет выполняться всякий раз, когда выбрана вкладка.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("E3")) Is Nothing Then
        Call runYourThing 'When the cell change event is triggered, only run your thing if the changed range includes cell E3
    End If
End Sub

Private Sub Worksheet_Activate()
    Call runYourThing 'When the worksheet activate event is triggered, always run your thing
End Sub

Sub runYourThing() 'Run the thing
    If UCase$(Range("E3").Value) = "DWW" Then
        Rows("6:47").EntireRow.Hidden = False 'if "DWW" is entered in E3, rows are Visible
    Else
        Rows("6:47").EntireRow.Hidden = True 'if anything other than "DWW" is entered in E3 or E3 is blank, the rows are hidden
    End If

    If UCase$(Range("E3").Value) = "THETIS" Then
        Rows("48:70").EntireRow.Hidden = False 'if "Thetis" is entered in E3, rows are visible
    Else
        Rows("48:70").EntireRow.Hidden = True 'if anything other than "Thetis" is  entered in E3 or E3 is blank, the rows are hidden
    End If

    If Range("E3").Value = "" Then
        Rows("71:75").EntireRow.Hidden = False 'if "DWW" is entered in E3, rows are Visible
    Else
        Rows("71:75").EntireRow.Hidden = True 'if anything other than "THETIS" is  entered in E3 or E3 is blank, the rows are hidden
    End If
End Sub
...