Excel VBA Макросы: Почему не работает макрос на скрытие строк и столбцов при использовании события Worksheet_Change?

Автор amonra946, 29 июля 2019, 09:01

amonra946

Не работает макрос на скрытие строк и столбцов при использовании события Worksheet_Change.
Отобразить строки и столбцы получается, а скрыть нет.
Когда очищаю ячейку X13 происходит ошибка "Type mismatch" и жёлтым выделяется эта строка:
If Target = "" Then

Помогите исправить ошибку.

Используется такой код:
Код
Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("X13")) Is Nothing Then
        If Target = "" Then
            Sheets("Лист1").Rows(14).Hidden = True
            Sheets("Лист2").Columns(1).Hidden = True
        Else
            Sheets("Лист1").Rows(14).Hidden = False
            Sheets("Лист2").Columns(1).Hidden = False
        End If
    End If

End Sub
[свернуть]

Администратор

Проблема связана с тем, что ячейка X13 объединённая.

Если юзер вводит данные в X13, то макрос считает, что изменения произошли в одной ячейке - в X13. В этом случае ошибка не происходит.

Если юзер очищает ячейку X13, то макрос считает, что очищена на только ячейка X13, а все ячейки, входящие в объединённую ячейку. В этом случае Target представляет собой не X13, а фрагмент X13:AS13. Этот фрагмент сравнивается с пустой строкой ("") и это считается недопустимым, т.к. можно сравнивать с пустой строкой только одну, а не несколько ячеек.

Обойти эту проблему можно так:
Код
Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("X13")) Is Nothing Then
        If Target.Cells(1).Value = "" Then
            Sheets("Лист1").Rows(14).Hidden = True
            Sheets("Лист2").Columns(1).Hidden = True
        Else
            Sheets("Лист1").Rows(14).Hidden = False
            Sheets("Лист2").Columns(1).Hidden = False
        End If
    End If

End Sub
[свернуть]