У меня есть 7 макросов, которые не позволяют пользователю копировать и вставлять в книгу.

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

Я могу только найти информацию о том, как отключить все макросы, и это невозможно сделать с помощью другого макроса.

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

Ниже приведены макросы, которые я использую для предотвращения копирования и вставки.

Private Sub Workbook_Activate()
    Application.CutCopyMode = False
    Application.OnKey "^c", ""
    Application.CellDragAndDrop = False
End Sub
Private Sub Workbook_Deactivate()
    Application.CellDragAndDrop = True
    Application.OnKey "^c"
    Application.CutCopyMode = False
End Sub
 Private Sub Workbook_WindowActivate(ByVal Wn As Window)
    Application.CutCopyMode = False
    Application.OnKey "^c", ""
    Application.CellDragAndDrop = False
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
    Application.CellDragAndDrop = True
    Application.OnKey "^c"
    Application.CutCopyMode = False
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Application.CutCopyMode = False
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Application.OnKey "^c", ""
    Application.CellDragAndDrop = False
    Application.CutCopyMode = False
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    Application.CutCopyMode = False
End Sub

1 ответ1

0

К сожалению, передача статуса / информации между запусками макросов в VBA непроста, поскольку между запусками макросов не может быть переменных. У вас есть два варианта:

  1. изменить код из другого макроса
    Дополнительная литература: https://stackoverflow.com/questions/14811343/is-it-possible-in-excel-vba-to-change-the-source-code-of-module-in-another-modul

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


Private Sub Workbook_Activate()
    If Sheets(1).Range("XFD1048576") = "paused" Then
        Exit Sub
    End If
    Application.CutCopyMode = False
    Application.OnKey "^c", ""
    Application.CellDragAndDrop = False
End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .