xaumichi
Goto Top

Automatischer Eintrag in DieseArbeitsmappe

Abend!

Also kurz meine Situation:

Wird in einem Excel-File ein Button betätigt, kommt ein kleines Anmeldeformular für einen neuen "Mitarbeiter".
Wenn alle Felder ausgefüllt sind und bestätigt wird, wird automatisch ein neues Tabellenblatt angelegt und mit einem Passwort gesichert. (manche Zellen halt, mit Formeln usw.)
Da in diesem ganzen Tabellenblatt Makros "arbeiten" muss ja unter "DieseArbeitsmappe" eine Vermerkt gemacht werden:

ThisWorkbook.Worksheets("NeuerMitarbeiter1").Protect Password:="Passwort", UserInterFaceOnly:=True  

Wie schaffe ich es, dass nun, wenn das Anmeldeformular bestätigt wird, automatisch dieser Eintrag unter "DieseArbeitsmappe", mit dem Richtigen Arbeitsblattnamen hinzugefüght wird?

Info:
-) das Passwort ist für jedes Blatt gleich
-) es gibt ein Tabellenblatt "Mitarbeiter", in dem alle Mitarbeiter aufgelistet sind (under Spalte A) und jedes neu erstellt TB hat als Tabellenblattnamen seinen richtigen Namen, sprich einen Wert aus Spalte A vom Tabellenlatt "Mitarbeiter"


Wär toll, wenn mir hierbei wer helfen könnt!

LG Mike

Content-Key: 148561

Url: https://administrator.de/contentid/148561

Ausgedruckt am: 28.03.2024 um 08:03 Uhr

Mitglied: 76109
76109 08.08.2010 um 08:57:43 Uhr
Goto Top
Hallo xaumichi!

Und warum schreibst Du nicht gleich beim Erstellen des neuen Tabellenblatts (AktiveSheet) die Codezeile mit rein?
ActiveSheet.Protect Password:="Passwort", UserInterFaceOnly:=True

Gruß Dieter
Mitglied: xaumichi
xaumichi 08.08.2010 um 11:13:37 Uhr
Goto Top
Hm...wie kann ich das machen, dass diese Zeile dann unter "DieseArbeitsmappe" und auch unter "Open"-Ereignis steht??
Denn sonst bringt es ja nichts, oder?!

Bzw. wie könnte ich diese Zeile dann löschen, wenn der jeweilige Mitarbeiter gelöscht wird?

LG Mike
Mitglied: 76109
76109 08.08.2010 um 12:44:33 Uhr
Goto Top
Hallo xaumichi!

Was hat der Schutz setzen/aufheben in dem Open-Erreignis verloren?

Natürlich kann man jetzt einen mords Code schreiben, der auch noch automatisiert VBA-Code einfügt, aber das ist mit einem riesen Aufwand verbunden und völlig unnötig.

Die normale Vorgehensweise wäre:
Neues Tabellenblatt erstellen, initialisieren und Blattschutz einmalig setzen.
Beim internen Bearbeiten der jeweiligen Mitarbeiterblätter vor einer Änderung explizit den Blattschutz aufheben und nach der Änderung sofort wieder setzen.

z.B. Diesen Code in ein Modul einfügen (= In Arbeitsmappe dann Public):
Sub WksProtect(ByRef Wks)   'Tabellenblatt-Schutz aktivieren  
    Wks.Protect Password:="Passwort",  UserInterFaceOnly:=True  
End Sub

Sub WksUnprotect(ByRef Wks)   'Tabellenblatt-Schutz deaktivieren  
    Wks.Unprotect Password:="Passwort"  
End Sub
Bei einer Änderung dann z.B.:
Call WksUnprotect(Sheets("Mitarbeiter"))  
'Änderungscode ausführen  
Call WksProtect(Sheets("Mitarbeiter"))  

Und wenn Dir das nicht sinnvoll erscheint und Du tatsächlich sowas machen willst, dann mach es über eine Each-Schleife:
For Each Wks In ThisWorkbook.Worksheets
    If Wks.Range("XY") = "Einheitliches Merkmal eines Mitarbeiter-Tabellenblatts" Then   
        Wks.Protect Password:="Passwort", UserInterFaceOnly:=True   
    End If
Next

Gruß Dieter
Mitglied: xaumichi
xaumichi 24.08.2010 um 14:51:11 Uhr
Goto Top
Okey!
Hab beide Möglichkeiten versucht und haben beide toll geklappt!
Danke schön!

Lg Mike