Как использовать (ByVal Target as Range) для нескольких диапазонов по всем листам - VBA? - PullRequest
0 голосов
/ 12 февраля 2020

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

enter image description here

Ниже приложите код моего модуля и код (ByVal Target as Range) Я надеваю каждый лист.

    Private Sub Worksheet_Change(ByVal Target As range)
        Dim rngToCheck As range
        Set rngToCheck = Intersect(Target, Me.range("E5:E36", "P5:P36"))

        If rngToCheck Is Nothing Then Exit Sub

        On Error GoTo SafeExit
        Application.EnableEvents = False

        Dim rng As range
        For Each rng In rngToCheck
            Select Case rng.Value
                Case "Final Action Taken"
                    Final_Action_Taken
                Case "Populate Non Final Action Taken Date"
                    EnterNonFinal_Date
                Case "Populate Previous SPD Submission"
                    SPD_PreviousSubmission
                Case "Final Action Taken SPD"
                    Final_Action_TakenSPD
            End Select
         Next

    SafeExit:
        Application.EnableEvents = True
    End Sub

            Sub Final_Action_Taken()
        'Ask for the date of last submission of document by business


        If ActiveCell = "Final Action Taken" Then

        Dim myValue As Variant, Output As range


        myValue = InputBox("Please enter the final document submission date for the current Sign Off Year.", "Final Submission Date")

        Set Output = ActiveCell.Offset(0, 2)

        Output = myValue

        End If
        End Sub
Sub EnterNonFinal_Date()
If ActiveCell = "Populate Non Final Action Taken Date" Then

Dim Output As range
Dim myValue As Variant

myValue = "=today()"

Set Output = ActiveCell.Offset(0, 2)

Output = myValue

End If

End Sub

Sub SPD_PreviousSubmission()
'Ask for the date of last submission of document by business


If ActiveCell = "Populate Previous SPD Submission" Then

Dim myValue As Variant

Dim Output As range

Dim Output2 As range

Dim myValue2 As Variant

myValue = InputBox("Please enter the Previous SPD Submission Date.", "Previous SPD Submission Date")

Set Output = ActiveCell.Offset(0, 1)

Output = myValue

myValue2 = "=today()"

Set Output2 = ActiveCell.Offset(0, 2)

Output2 = myValue2

End If
End Sub

Sub Final_Action_TakenSPD()
'Ask for the date of last submission of document by business


If ActiveCell = "Final Action Taken SPD" Then

Dim myValue As Variant, Output As range


myValue = InputBox("Please enter the final document submission date for the current Sign Off Year.", "Final Submission Date")

Set Output = ActiveCell.Offset(0, 2)

Output = myValue

End If
End Sub

Обратите внимание, что я новичок в VBA, поэтому я немного растерялся, любая помощь будет принята с благодарностью.

Спасибо заранее!

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

IIU C, вы ищете следующие диапазоны:

Set rngToCheck = Intersect(Target, Me.Range("E5:E36,P5:P36,Q5:Q36"))

Из документации Range:

Использование Range ( cell1 , cell2 ), где cell1 и cell2 являются Range объектов которые задают начальную и конечную ячейки для возврата объекта Range

Вы указываете не начальную и конечную ячейки, а различные области рассматриваемого диапазона. Итак, вы хотите, чтобы адрес диапазона находился в кавычках.

0 голосов
/ 12 февраля 2020

Попробуйте использовать

Intersect(Target, Union(Me.Range("E5:E36"), Me.Range("P5:P36")))

вместо

Intersect(Target, Me.range("E5:E36", "P5:P36")).

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