Триггеры событий и функция диапазона - ошибка времени выполнения - PullRequest
0 голосов
/ 10 января 2019

У меня есть следующая функция рабочего листа, сохраненная в модуле Sheet1 (DataInput) VBA

Sub worksheet_change(ByVal target As Range)
    Set target = Range("F67")

    If target.Value = "YES" Then
        Call ThisWorkbook.Red_Macro_Text
    End If
End Sub

Этот код вызывает следующий код в ThisWorkbook

Public Sub Red_Macro_Text()
    ThisWorkbook.Worksheets("DataInput").Range("B68").Value2 =  ThisWorkbook.Worksheets("Text").Range("B3").Value2
End Sub

Назначение кода следующее:

  1. Код использует триггер события для отслеживания изменений в ячейке «datainput» таблицы F67.
  2. Всякий раз, когда пользователь выбирает «ДА» из выпадающего меню в ячейке F67, он вызывает подпрограмму в ThisWorkbook.
  3. Код использует функцию диапазона для присвоения значения «текстовой» рабочей таблице B3 ячейке «68 »рабочей таблицы« datainput ».

Событие триггера вызывает код, и содержимое B3 передается на B68, однако после этого я получаю сообщение об ошибке:

Ошибка времени выполнения ‘-2147417848 (80010108)’: ошибка автоматизации Объект invoked отключился от своих клиентов.

Обратите внимание, что я не хочу использовать оператор IF в Excel для достижения этой цели, поскольку я пытаюсь автоматизировать процесс в VBA.

Я некоторое время безуспешно искал решение этой проблемы.

Кто-нибудь знает, как решить эту проблему, когда я достиг предела моего понимания!

Вся помощь приветствуется

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Попробуйте

Sub worksheet_change(ByVal Target As Range)
    If Target.Address = Range("F67").Address Then
        If Target.Value = "YES" Then
            Call ThisWorkbook.Red_Macro_Text
        End If
    End If
End Sub
0 голосов
/ 10 января 2019

Нет смысла Set target = Range("F67"), потому что он уже получен как параметр ByVal target As Range

Если вы хотите запустить код только в случае изменений F67, используйте следующее:

Sub worksheet_change(ByVal Target As Range)
    If Not Intersect(Target, Target.Parent.Range("F67")) Is Nothing Then
        If Target.Parent.Range("F67").Value = "YES" Then
            ThisWorkbook.Red_Macro_Text
        End If
    End If
End Sub

Обратите внимание, что Call не требуется для вызова макроса.

...