Выбор и копирование VBA не работают после добавления заблокированных / разблокированных ячеек в Excel

Я создал лист Excel с кнопкой управления (Active X Control). Кнопка выделяет и копирует ячейки e2: e16, e106: e117.

Я также добавил код для блокировки или разблокировки ячеек C112 и C116 в зависимости от ячейки C3. Если C3, если «1», ячейки остаются разблокированными, а если «2», ячейки блокируются.

Лист начинает защищаться, поэтому блокируется большинство ячеек, кроме тех, в которые нужно вводить данные.

Когда ActiveSheet.Protect "" закомментирован, он копируется правильно, но лист не защищает себя после того, как я изменю C3 на "1" или "2".

Если «ActiveSheet.Protect» не закомментирован, блокировка / разблокировка работает, но он пытается выбрать и скопировать ячейку C3 и игнорирует диапазон, который предполагается выбрать и скопировать.

Я бы хотел, чтобы оба работали вместе.

Таблицы кода и Excel

Вверху слева 'ActiveSheet.Protect закомментирован.

Вверху справа после нажатия кнопки «Копировать рассказ» он выбирает и копирует правильную область, но весь лист не защищен.

Внизу слева ActiveSheet.Protect не закомментирован.

Внизу справа после нажатия «Копировать рассказ» выбирается и копируется ячейка C3.

Выберите и скопируйте ячейки:

Private Sub copyButton_Click()

    'Check for blanks'
    If Range("c3").Value = "" Or _
        Range("c6").Value = "" Or _
        Range("c7").Value = "" Or _
        Range("c8").Value = "" Or _
        Range("c9").Value = "" Or _
        Range("c10").Value = "" Or _
        Range("c108").Value = "" Or _
        Range("e16").Value = "" Or _
        Range("e106").Value = "" Or _
        Range("e115").Value = "" Then
        MsgBox "Required fields are blank."
    Exit Sub
    Else

    'Copy Ranges
    Range("e2:e16,e106:e117").Select
    Selection.Copy

    End If

End Sub

Блокировка / разблокировка ячеек:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

   'Change cells locked/unlocked
     ActiveSheet.Unprotect ""
     If Range("C3").Value = "1" Then
      Range("C112,c116").Locked = False
     Else: Range("C3").Value = "2"
      Range("C112,c116").Locked = True
     End If
     ActiveSheet.Protect ""

End Sub

person K.Zelda    schedule 12.02.2020    source источник


Ответы (1)


я думаю тебе надо

A. Снять защиту перед копированием Диапазон

Or

Б. Не вызывайте «Worksheet_SelectionChange» во время выполнения «copyButton_Click».

код удара - случай B

Private Sub copyButton_Click()
    'Dont Call Sheet events
    Application.EnableEvents = false
    'Check for blanks'
    If Range("c3").Value = "" Or _
        Range("c6").Value = "" Or _
        Range("c7").Value = "" Or _
        Range("c8").Value = "" Or _
        Range("c9").Value = "" Or _
        Range("c10").Value = "" Or _
        Range("c108").Value = "" Or _
        Range("e16").Value = "" Or _
        Range("e106").Value = "" Or _
        Range("e115").Value = "" Then
        MsgBox "Required fields are blank."
    Exit Sub
    Else

    'Copy Ranges
    Range("e2:e16,e106:e117").Select
    Selection.Copy

    End If
    'rollBack
    Application.EnableEvents = True
End Sub


person Sacru2red    schedule 12.02.2020