Disabilita una macro, con un'altra macro. EXCEL VBA


0

Ho 7 macro che impediscono a un utente di copiare e incollare in una cartella di lavoro.

Tuttavia, ogni tanto voglio essere in grado di copiare e incollare. C'è un modo per disabilitare queste macro con un'altra macro?

Posso solo trovare informazioni su come disabilitare tutte le macro e questo non sembra realizzabile con un'altra macro stessa.

Vorrei anche essere in grado di riattivare le macro e pianificare l'esecuzione di questa macro ogni volta che la cartella di lavoro viene chiusa, in modo che l'utente successivo, per impostazione predefinita, non possa copiare e incollare.

Di seguito sono riportate le macro che utilizzo per impedire la copia e l'incollaggio.

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

Creare una variabile variabile maschera a questo livello di modulo con il valore corretto. Eseguire l'azione di disabilitazione solo se è impostato un bit di questa variabile. Modifica questa variabile da Immediata, un'altra macro o modifica il codice per una modifica permanente.
Akina,

Risposte:


0

Sfortunatamente il trasferimento di stato / informazioni tra una serie di macro non è facile in VBA poiché nessuna variabile può persistere tra una serie di macro. Hai due opzioni:

  1. cambia il codice da un'altra macro
    Ulteriori letture: https://stackoverflow.com/questions/14811343/is-it-possible-in-excel-vba-to-change-the-source-code-of-module-in-another -modul

  2. memorizzare le informazioni sullo stato in una cella.
    Ad esempio, puoi utilizzare la cella nell'angolo in basso a destra di un foglio di calcolo in quanto non viene regolarmente utilizzata dagli utenti.
    Puoi modificare il tuo codice ad es


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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.