Anzeige
Archiv - Navigation
1776to1780
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

Tabellenblatt-Name aus Zelle mit Arbeitsmappenschutz

Tabellenblatt-Name aus Zelle mit Arbeitsmappenschutz
27.08.2020 20:50:58
Alexia
Hallo zusammen
Meine Arbeitsmappe ist geschützt, ebenso sämtliche Tabellenblätter, Eingaben können nur in bestimmten Zellen gemacht werden. Nun soll in einer bestimmten Zelle (B14) ein Titel eingegeben werden, aus dem dann automatisch der Name des Tabellenblattes generiert wird.
Der Code sieht momentan wie folgt aus:
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveWorkbook.Unprotect Password:="123"
If Not Application.Intersect(Target, Range("B14:B14")) Is Nothing Then
On Error GoTo Fehlermeldung
If Target = "" Then
ActiveWorkbook.Protect Password:="123"
Exit Sub
End If
ActiveSheet.Name = Range("B14").Value
ActiveWorkbook.Protect Password:="123"
End If
Exit Sub
Fehlermeldung:
MsgBox "Es wurden zu viele oder ungültige Zeichen erfasst!"
Range("B14").Value = "ungültig"
ActiveWorkbook.Protect Password:="123"
End Sub
Es funzt richtig, wenn ich korrekte Zeichen oder gar nichts eingebe. Dann wird auch schön wieder der Workbook-Schutz aktiviert.
Wenn ich hingegen ungültige Zeichen verwende, passiert Folgendes: es kommt die Fehlermeldungs-Box, ich klicke sie mit "ok" weg, der Wert in der Zelle B14 ändert wie gewünscht zu "ungültig", ebenso der Tabellenblatt-Name, aber der Arbeitsmappenschutz wird nicht mehr aktiviert.
Kann mir jemand erklären weshalb bzw. wo der Fehler liegt?
Vielen Dank schon mal und Gruss
Alexia

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblatt-Name aus Zelle mit Arbeitsmappenschutz
27.08.2020 21:00:30
onur
Wenn man mit dem Change-Event arbeitet, sollte man genau wissen, was man tut.
Dein Code ruft sich selbst auf, jedes mal wenn B14 durch den Code geändert wird.
Am Anfang Events deaktivieren und am Ende bzw vor "Exit Sub" aktivieren und am besten auf Error-Handler verzichten.
elegantere Lösung...?
27.08.2020 21:31:15
Alexia
Hallo Onur
Danke für die Antwort. Ja, ich weiss tatsächlich nicht wirklich, was ich tue... Habe allerdings verstanden, dass sich der Code selbst aufruft.
Was wäre denn deine elegantere Lösung? Die Fehlermeldung würde ich halt schon gerne bringen, damit die Nutzer der Datei erklärt bekommen, dass sie was Unpassendes eingegeben haben.
Gruss
Alexia
Anzeige
AW: elegantere Lösung...?
27.08.2020 21:37:43
onur
Wie ich bereits schrieb:
Events am Anfang der Sub deaktivieren und vor Verlassen der Sub wieder aktivieren.
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
ActiveWorkbook.Unprotect Password:="123"
If Not Application.Intersect(Target, Range("B14:B14")) Is Nothing Then
On Error GoTo Fehlermeldung
If Target = "" Then
ActiveWorkbook.Protect Password:="123"
Application.EnableEvents = True
Exit Sub
End If
ActiveSheet.Name = Range("B14").Value
ActiveWorkbook.Protect Password:="123"
End If
Application.EnableEvents = True
Exit Sub
Fehlermeldung:
MsgBox "Es wurden zu viele oder ungültige Zeichen erfasst!"
Range("B14").Value = "ungültig"
ActiveWorkbook.Protect Password:="123"
Application.EnableEvents = True
End Sub

Anzeige
AW: elegantere Lösung...?
27.08.2020 21:51:06
Alexia
Danke Onur
Ja, das hatte ich verstanden, ich dachte bloss, du würdest das Ganze komplett anders aufsetzen, da du den Error Handler weglassen wolltest...
Vielen Dank jedenfalls für deine prompten Antworten!
Gruss Alexia
AW: elegantere Lösung...?
27.08.2020 22:01:04
onur
Den Error-Handler kann man weglassen, aber dafür müsste ich wissen, welche Zeichen ungültig sind.
Hier etwas kürzer:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row  14 Or Target.Column  2 Or Target = "" Then Exit Sub
ActiveWorkbook.Unprotect Password:="123"
On Error GoTo Fehlermeldung
ActiveSheet.Name = Range("B14").Value
GoTo Ende
Fehlermeldung:
MsgBox "Es wurden zu viele oder ungültige Zeichen erfasst!"
Application.EnableEvents = False
Range("B14").Value = "ungültig"
Ende:
ActiveWorkbook.Protect Password:="123"
Application.EnableEvents = True
End Sub

Anzeige
neue Version
28.08.2020 10:23:50
Alexia
Danke für deine Geduld... Habe mich aufgrund deines Vorschlags nochmals mit dem Ganzen befasst, z.T. noch etwas ausgebaut und habe jetzt eine Version, die für mich funktioniert. Vielleicht immer noch haarsträubend für Profis, aber als erste VBA-Gehversuche wohl akzeptabel und immerhin glaube ich jetzt verstanden zu haben, was ich mache...
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address  "$B$14" Then Exit Sub
If Target = "" Then
MsgBox "Error: Kein Titel eingegeben!"
Application.EnableEvents = False
Range("B14").Value = "bitte Titel eingeben"
Application.EnableEvents = True
Exit Sub
End If
ActiveWorkbook.Unprotect Password:="123"
On Error GoTo Fehlermeldung
ActiveSheet.Name = Left(Range("B14").Value, 15)
ActiveWorkbook.Protect Password:="123"
Exit Sub
Fehlermeldung:
MsgBox "Error: Ungültige Zeichen oder Name bereits vorhanden!"
Application.EnableEvents = False
Range("B14").Value = "bitte Titel eingeben"
Application.EnableEvents = True
ActiveWorkbook.Protect Password:="123"
End Sub
Vielen Dank nochmals!
Anzeige
AW: neue Version
28.08.2020 10:28:10
onur
Der Code sieht schon besser aus, aber er wird Probleme machen, falls B14 leer ist, da du das Blatt noch nicht "entprotected" hast.
AW: neue Version
28.08.2020 10:28:17
onur
Der Code sieht schon besser aus, aber er wird Probleme machen, falls B14 leer ist, da du das Blatt noch nicht "entprotected" hast.
AW: neue Version
28.08.2020 10:38:21
onur
Und zwischen den beiden Zeilen gehört "Application.EnableEvents = True"
ActiveWorkbook.Protect Password:="123"
Exit Sub

AW: neue Version
28.08.2020 22:05:29
Alexia
Danke dir fürs Feedback! Verstehe jetzt aber deine Bemerkungen nicht ganz.
Zur ersten: Habe x-fach getestet, es funktioniert immer. B14 ist zu Beginn nicht leer (es steht ein Beispiel drin). Wenn man das löscht, kommt wie gewünscht die erste MsgBox etc.
Zur zweiten: Ich habe doch 2x EnableEvents = False und gleich danach wieder EnableEvents = True, jeweils nach den beiden Error-Meldungen. Weshalb dann nochmals? Oder habe ich da die Logik der VBA-Sprache noch nicht kapiert?
Anzeige
AW: neue Version
28.08.2020 22:15:16
onur
Die zweite Bemerkung ist Blödsinn, mein Fehler.
ABER:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address  "$B$14" Then Exit Sub'Mappe ist geschützt
If Target = "" Then'Mappe ist immer noch geschützt
MsgBox "Error: Kein Titel eingegeben!"'Mappe ist immer noch geschützt
Application.EnableEvents = False'Mappe ist immer noch geschützt
Range("B14").Value = "bitte Titel eingeben"'MAPPE IST IMMER NOCH GESCHÜTZT - UND DU WILLST  _
B14 BESCHREIBEN 
Application.EnableEvents = True
Exit Sub
End If
ActiveWorkbook.Unprotect Password:="123"'HIER ERST WIRD SCHUTZ AUFGEHOBEN
On Error GoTo Fehlermeldung
ActiveSheet.Name = Left(Range("B14").Value, 15)
ActiveWorkbook.Protect Password:="123"
Exit Sub
Fehlermeldung:
MsgBox "Error: Ungültige Zeichen oder Name bereits vorhanden!"
Application.EnableEvents = False
Range("B14").Value = "bitte Titel eingeben"
Application.EnableEvents = True
ActiveWorkbook.Protect Password:="123"
End Sub

Anzeige
AW: neue Version
29.08.2020 08:06:19
Alexia
Ja... Und es funzt auch...
Der Schutz der Mappe(Workbook) hindert mich ja nicht am Schreiben in der Zelle B14. Er schützt nur die Struktur der Blätter und deren Benennung sowie deren Ein-/Ausblenden.
(Der Schutz des Blattes (Worksheet) ist zwar auch aktiviert, aber an dem wird nix verändert, B14 ist sowieso explizit nicht gesperrt und kann immer bearbeitet werden.)
AW: neue Version
29.08.2020 09:29:22
onur
Hast ja recht, ich Trottel.
AW: neue Version
29.08.2020 12:22:20
Alexia
Alles gut. Danke nochmals für alle deine Inputs!

241 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige