2016-08-04 4 views
0

Ich versuche, eine Schutzfunktion aufzurufen, die ausgeführt werden soll, bevor die Arbeitsmappe geschlossen wird, aber nicht funktioniert. Der Schutz Unter arbeitet an seiner eigenen Ordnung, aber nicht, wenn sie in Workbook_BeforeClose() aufgerufenAufruf der Funktion BeforeClose-Ereignis in VBA funktioniert nicht

Dies ist der Code in Modul 1 zu finden ist:

Public Sub protect() 

Dim index As Integer 
index = 1 

Do While index <= ActiveWorkbook.Worksheets.Count 
ActiveWorkbook.Sheets(index).Activate 
If ActiveSheet.Name <> "README" Then 
    ActiveSheet.unprotect 
    Cells.Select 
    Selection.Locked = True 
    Selection.FormulaHidden = False 
    ActiveSheet.protect DrawingObjects:=True, Contents:=True, Scenarios:=True 
    ActiveSheet.Range("A1").Select 
End If 
index = index + 1 
Loop 

ActiveWorkbook.Sheets(1).Activate 

End Sub 

Dies ist der Code gefunden in Thisworkbook:

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Call protect 
End Sub 
+1

Willkommen bei StackOverflow, Code Mädchen. Was meinst du damit, wenn du sagst, dass es nicht funktioniert? Tritt ein Fehler auf, während der Code ausgeführt wird oder läuft der Code (scheinbar) überhaupt nicht, weil die Blätter nicht geschützt sind? Wenn Sie den letzteren der beiden Fälle annehmen, dann würde ich eine "MsgBox" einfügen, nur um sicher zu sein (wenn der Code läuft oder nicht). Wie löst man das Ereignis '_BeforeClose' aus? Schließen Sie die Datei (Excel bleibt geöffnet) oder schließen Sie Excel (und wie)? – Ralph

+0

Wenn ich dieses kinfd des Problems bekomme, füge ich hier und da in meinem Code etwas ein wie 'debug.print jetzt, 'Protect'' (oder irgendein Modulname) –

+0

Der Code läuft überhaupt nicht. Ich habe ein Meldungsfeld eingefügt und es erschien vor dem Schließen der Datei, aber der Schutz-Sub lief noch immer nicht:/Das BeforeClose-Ereignis wird ausgelöst, wenn Sie die Datei schließen, dann fragt es, ob Sie Änderungen speichern möchten, bevor Sie schließen; Selbst wenn Sie Abbrechen anstatt Speichern auswählen, wird der Code immer noch ausgeführt, bevor Sie aufgefordert werden, –

Antwort

0

Ich hatte das genaue Problem mit einem Protect Sub. Es stellte sich heraus, dass dev1998 korrekt war und die Arbeitsmappe Probleme hatte, das Sub zu finden. Versuchen Sie es mit: "Call Module1.Protect", oder anstelle von Module1, welches Modul Ihre protect Sub ist in

Verwandte Themen