Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1316to1320
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Blattschutz wenn A1 gefüllt

Blattschutz wenn A1 gefüllt
15.06.2013 09:52:09
Heike
Hallo,
ich möchte gerne folgendes per VBA realisieren:
Wenn die Mappe gespeichert wird
- schau nach, ob in dem Tabellenblatt „Einkauf“ in der Zelle A1 ein X steht,
- wenn ja, dann setze einen Blattschutz auf die Tabellenblätter „Einkauf“ und „Verkauf“ mit dem Passwort: „Test“
Es geht darum, der Anwender darf beim erstmaligen Öffnen Änderungen vornehmen (per VBA wird autom. ein X in Zelle A1 gesetzt). Sobald er diese aber speichert/schließt, darf er in diesen beiden Tabellenblättern nichts mehr ändern (es gibt noch weitere Tabellenblätter, diese darf er ändern).
Freue mich natürlich über eine Lösung.
Vielen Dank schon einmal im Voraus.
Heike

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Blattschutz wenn A1 gefüllt
15.06.2013 09:55:43
Hajo_Zi
Hallo Heike,
wenn Du das "X" einträgst, warum schützt Du dann nicht gleich?

AW: Blattschutz wenn A1 gefüllt
15.06.2013 10:15:00
fcs
hallo Heike,
wenn du Hajo's Vorschlag nicht umsetzen kannst, dann geht es etwa so:
'Makro im VBA-Editor unter "DieseArbeitsmappe" der Datei
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If LCase(Me.Worksheets("Einkauf").Range("A1")) = "x" Then
Me.Worksheets("Einkauf").Protect Password:="Test"
Me.Worksheets("Verkauf").Protect Password:="Test"
End If
End Sub
Gruß
Franz

Anzeige
AW: Blattschutz wenn A1 gefüllt
15.06.2013 11:25:13
Heike
Hallo ihr beide,
jetzt beim Ausprobieren stelle ich fest, da "beißt sich der Hund in den Schwanz". :-(
Hier ist mein bisheriger Code:

Private Sub Workbook_Open()
Application.DisplayAlerts = False
Dim iButton As Integer
Dim Dateiname As String
If Me.Worksheets("Einkauf").Cells(1, 1) = "" Then
Dateiname = Format(Date, "yyyy-mm-dd")
iButton = MsgBox("Bitte die Datei unter einem neuen Namen speichern!", vbInformation +  _
vbOKCancel, _
"A C H T U N G!!!")
If iButton = vbOK Then
Application.Dialogs(xlDialogSaveAs).Show Dateiname
ElseIf iButton = vbCancel Then
ThisWorkbook.Close SaveChanges:=False
End If
End If
If ActiveWorkbook.Name = "Heike_org.xlsm" Then
Exit Sub
Else
Worksheets("Einkauf").Cells(1, 1) = "x"
End If
Application.DisplayAlerts = True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If LCase(Me.Worksheets("Einkauf").Range("A1")) = "x" Then
Me.Worksheets("Einkauf").Protect Password:="Test"
Me.Worksheets("Verkauf").Protect Password:="Test"
End If
End Sub
Zudem kommt, dass auch Zellen, die nicht gesperrt (Schutz) waren, wie DropDown usw. nun auch gesperrt werden sollen.
Könnt ihr mir weiter helfen? Bitte.
Vielen Dank
Gruß
Heike

Anzeige
AW: Blattschutz wenn A1 gefüllt
16.06.2013 10:32:37
fcs
Hallo Heike,
damit sich der Hund nicht in den Schwanz beißt muss die Logik im WorkbookOpen-Makro etwas optimiert werden und die Ereignismakros müssen zeitweise deaktiviert werden.
Das WorkbookBeforeClose-Makro ist nicht erforderlich, da je nach Auswahl im Warndialog dann das BeforeSave-Makro ausgeführt wird.
Das Makro sperrt in den beiden Blättern jetzt zusätzlich alle nicht gesperrten Zellen.
Gruß
Franz
'Code unter Diese Arbeitsmappe
Private Sub Workbook_Open()
Application.DisplayAlerts = False
Dim iButton As Integer, Auswahl As Variant
Dim Dateiname As String
If Me.Worksheets("Einkauf").Cells(1, 1) = "" Then
Dateiname = Format(Date, "yyyy-mm-dd")
iButton = MsgBox("Bitte die Datei unter einem neuen Namen speichern!", _
vbInformation + vbOKCancel, _
"A C H T U N G!!!")
If iButton = vbOK Then
Application.EnableEvents = False 'verhindert, dass Ereignismakros gestartet werden
Auswahl = Application.Dialogs(xlDialogSaveAs).Show(Dateiname)
Application.DisplayAlerts = True
Application.EnableEvents = True 'Ereignismakros wieder aktivieren
If Auswahl = False Then
Me.Close savechanges:=False
End If
ElseIf iButton = vbCancel Then
ThisWorkbook.Close savechanges:=False
End If
End If
If ActiveWorkbook.Name = "Heike_org.xlsm" Then
Application.DisplayAlerts = True
Exit Sub
Else
Application.DisplayAlerts = True
With Worksheets("Einkauf").Cells(1, 1)
If .Value = "" Then
.Value = "x"
Application.EnableEvents = False
Me.Save
Application.EnableEvents = True
End If
End With
End If
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Zelle As Range
If LCase(Me.Worksheets("Einkauf").Range("A1")) = "x" Then
With Me.Worksheets("Einkauf")
.Unprotect Password:="Test"
For Each Zelle In .UsedRange.Cells
If Zelle.Locked = False Then Zelle.Locked = True
Next
.Protect Password:="Test"
End With
With Me.Worksheets("Verkauf")
.Unprotect Password:="Test"
For Each Zelle In .UsedRange.Cells
If Zelle.Locked = False Then Zelle.Locked = True
Next
.Protect Password:="Test"
End With
End If
End Sub

Anzeige
AW: Blattschutz wenn A1 gefüllt
17.06.2013 11:22:13
Heike
Hallo Franz,
entschuldigung, dass ich mich erst jetzt melde, mein Rechner hatte sich verabschiedet, bin nun im Büro.
Werde deinen Code gleich mal ausprobieren. Vielen Dank dafür!
LG
Heike

AW: Blattschutz wenn A1 gefüllt
17.06.2013 12:37:07
Heike
Hallo Franz,
habe deinen Code nun eingebaut, erhalte aber einen Debugger beim Speichern oder Schließen:
        If Zelle.Locked = False Then Zelle.Locked = True
Hast du eine Idee?
Danke dir.
LG
Heike

AW: Blattschutz wenn A1 gefüllt
17.06.2013 13:17:20
fcs
Hallo Heike,
wie lautet die Fehlermeldung?
Wird der Blattschutz korrekt aufgehoben? Paswort korrekt?
Gibt es verbundenen Zellen in dem Tabellenblatt? Das könnte hier auch Probleme machen.
Evtl. wird es auch einfacher, wenn man einfach nach dem Aufhebn des Blattschutzes alle Zellen auf geschützt setzt, statt in einer Schleife nur die noch nicht geschützten Zellen zu schützen-
Gruß
Franz

Anzeige
AW: Blattschutz wenn A1 gefüllt
18.06.2013 08:27:47
Heike
Hallo Franz,
Fehlermeldung: Laufzeitfehler 1004 - Die Locked-Eigenschaft des Range-Objektes kann nicht festgelegt werden
Blattschutz wird korrekt gesetzt. Verbundene Zellen gibt es für 3 nebeneinander liegende Spalten.
Wenn es einfacher ist, ALLES zu schützen, ist das natürlich o.k.
Bin schon am verzweifeln!
Danke dir für deine Mühe.
LG
Heike

AW: Blattschutz wenn A1 gefüllt
18.06.2013 11:09:04
fcs
Hallo Heike,
probiere mal die folgende Anpassung des BeforSave-Makros.
Falls das nicht funktioniert. Dann müsste man sich um die verbundenen Zellen mal sehr speziell kümmern oder es wäre zu prüfen, ob unbedingt mit verbundnen Zellen gearbeitet werden muss.
Gruß
Franz
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Zelle As Range
If LCase(Me.Worksheets("Einkauf").Range("A1")) = "x" Then
With Me.Worksheets("Einkauf")
.Unprotect Password:="Test"
.Cells.Locked = True
.Protect Password:="Test"
End With
With Me.Worksheets("Verkauf")
.Unprotect Password:="Test"
.Cells.Locked = True
.Protect Password:="Test"
End With
End If
End Sub

Anzeige
Funktioniert :-)
18.06.2013 16:33:46
Heike
Hallo Franz,
ja super, es funktioniert. Habe es "querfeldein" geprüft und bis jetzt kam keine Fehlermeldung.
Vielen vielen Dank dafür.
Liebe Grüße
Heike

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige