Zeile mit Buchstabe sperren
#1
Hallo liebe Gemeinde,

Kurz vorab: Ich bin ein blutiger Anfänger und kann gerade mal =SUMME und Co  :22:
Ich habe nichts (verständliches) gefunden oder ich bin zu dusslig die Suchfunktion richtig zu bedienen. Ihr löst mein Problemchen bestimmt in 30 Sekunden.

Folgende Problematik: Ich benutze eine Exceltabelle als Arbeitszeitkonto für mein Unternehmen. Die Tabelle ist für das ganze Jahr vorgegeben und soweit fertig. Die Mitarbeiter tragen Tag für Tag oder wöchentlich ihre Arbeitszeiten ein und ich als Chef zeichne sie einmal wöchentlich ab. Die Tabelle rechnet natürlich alles ganz brav aus. Herrliches Tool.

Was ich nun möchte ist:
- Tabelle vom jeweiligen Mitarbeiter öffnen
- Blattschutz aufheben
- In der Spalte "Z" zum Beispiel ein "x" eintragen (dann soll die ganze Zeile "Montag" von A bis Y gesperrt sein)
- Blattschutz wieder rein
- Speichern. Fertig. Mitarbeiter kann nicht mehr an vergangenen Tagen rumspielen

Ich würde mich sehr über eure Hilfe freuen.
Schönes Wochenende und viele Grüße
Martin
Top
#2
Hallo

Wenn du eh mit Blattschutz arbeitest dann Sperre die Zellen die nicht mehr geändert werden dürfen und die anderen gibst du frei.

Mfg Elex
Top
#3
(22.09.2017, 23:09)Elex schrieb: Hallo

Wenn du eh mit Blattschutz arbeitest dann Sperre die Zellen die nicht mehr geändert werden dürfen und die anderen gibst du frei.

Mfg Elex

Wenn ich das richtig verstehe soll ich:
- Blattschutz aufheben
- mittels Rechtsklick - Formatieren - Schutz - Gesperrt markieren. 
- Blattschutz rein

Bei 20 Mitarbeitern/Tabellen artet das leider wöchentlich in Arbeit aus. Zu viel Klickerei. Habe ich 1 Monat so gemacht Sad
Mir wäre die oben genannte Variante lieber. So könnte ich die Woche einmal schnell durch x-en und speichern.

Viele Grüße
Martin
Top
#4
Hi

Geht dann aber nur mit VBA.
Ich schaue Morgen wieder ins Forum. Für heut ist Feierabend. Wenn bis da keine Lösung eingegangen ist Versuche ich mich.

Mfg
Top
#5
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 Target.EntireRow.Locked = (Target.Value = "x")
End Sub

Das habe ich schonmal gefunden. Theoretisch funktioniert es auch ganz gut. Nur gibt es ständig Laufzeitfehler.
Kann ich diesen Code auf bestimmte Zellen pro Zeile (die Eingabefelder, welche keine Formeln hinterlegt haben) begrenzen? Ich vermute, dass sich dann die Laufzeitfehler in Luft auflösen.
Also jetzt nicht EntireRow (Ganze Reihe) sondern aus der Reihe nur H, I, J, K sperren wenn ein x in der gleichen Reihe eingegeben wird!?

Vielen Dank und Viele Grüße
Martin
Top
#6
Hi,

den Code in eine Prozedur einfügen. Workssheet_Change Prozedur ist hier ungeeignet.
Vorschlag: Zeichne mit dem Rekorder ein kurzes Makro mit Vergabe einer Tastenkombination auf und füge den Code dort ein.

For k = 2 To 366 'kannst du an deinen Bereich anpassen
Code:
Dim k As Long
For k = 2 To 366                    'Zellen in denn ein x stehen kann hier (Z2:Z366)
    If ActiveSheet.Cells(k, 26) = "x" Then
       ActiveSheet.Range(Cells(k, 8), Cells(k, 11)).Locked = True   'Zellen H;I;J;K sperren
       ActiveSheet.Cells(k, 26).Locked = True                       'Zelle Z sperren
    End If
Next k

Mfg Elex
Top
#7
Hallo Martin,

zuerst einmal musst Du im ungeschützten Tabellenblatt alle Zellen entsperren, da sie per Voreinstellung auf gesperrt stehen.
Sub AlleZellenEntsperren()
 Cells.Locked = False
End Sub

Dann Dein Code etwas erweitert (Passwort entsprechend ändern):
Private Sub Worksheet_Change(ByVal Target As Range)
 Set Target = Target.Cells(1)
 If Target.Column = 26 Then
   Me.Unprotect "Password"
   Target.EntireRow.Locked = Target.Value = "x"
   Me.Protect "Password"
 End If
End Sub

Gruß Uwe
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste