419 Aufrufe
Gefragt in Tabellenkalkulation von

HAllo Zusammen

Ich bin gerade dabei einen Wartungsplan für Fahrzeuge zu erstellen.
Ziel wäre es, dass der Mechaniker am ende der Woche die entschprechenden Wartungschritte in der richtigen KW einträgt. Ich möchte jedoch verhindern, dass der Mechaniker nachträglich Wartungen eintragen kann (Also z.b in der KW15, KW14 nichtmehr bearbeiten kann.) Dafür müsste ich die entschprechenden Zellen Sperren. Ich habe auf einem seperaten Blat in meiner Mappe die Akktuelle KW und frage sie dan ab resp. wenn in der entsprechenden KW-Kollone keine angabe finde, soll "OUT" in der Zelle stehen. das klappt bis jetzt gut.  

Bessten dank für eure hilfe ^^

11 Antworten

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo R.G.

wenn du das automatisieren willst, so kannst du das über ein Makro machen. Aber nur mit Bildern wird das für die Helfer schwierig. Wenn du eine Beispieldatei zur Verfügung stellen könntest, wäre das besser. Wie du das machen kannst, kannst du hier nachlesen: Anleitung

Gruß

M.O.

0 Punkte
Beantwortet von

habe selber noch keine erfahrungen mit makros.

gibts einen empfehlenswerten link wo man das im Selbststudium lernen könnte?

Habe dir jetzt mal das Fille in den Anhang gepackt.

der schreibschutzschlüssel ist : 1234

mfg R.G

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
 
Beste Antwort

Hallo R.G.

zuerst musst du noch etwas Vorabeit leisten: Entsperre in deiner Tabelle "leere Vorlage" alle Zellen, die bearbeitet werden sollen (rechte Maustaste - Zellen formatieren - Schutze - Haken bei "gesperrt" entfernen).

Danach füge in das VBA-Projekt der Tabelle (Anleitung hier) den folgenden Code ein:

Private Sub Worksheet_Activate()

Dim kw As Long
Dim s As Long

'vorhandenen Blattschutz aufheben
ActiveSheet.Unprotect "1234"

'Zahl der aktuellen Kalenderwoche ermitteln und um 1 verringern
'-> alte Kalenderwochen werden gesperrt
kw = CLng(Left(Range("H4"), Len(Range("H4")) - 3)) - 1

'Sperrung erst ab 2. Kalenderwoche ausführen
If kw > 0 Then
  'einzelne KW durchlaufen, ab Spalte C
  For s = 3 To 2 + kw
  'prüfen, ob für 1. Zelle ein Blattschutz besteht
   If Cells(20, s).Locked = False Then
     'falls nicht, Zellen im Bereich der Zeilen 20 bis 37 bei der jeweiligen Kalenderwoche sperren
     Range(Cells(20, s), Cells(37, s)).Locked = True
   End If
  Next s
 End If

'Blattschutz setzen
ActiveSheet.Protect "1234"

End Sub

Beachte bitte, dass du das Passwort (hier 1234) natürlich an deine Verhältnisse anpassen musst. Bei der Prüfung. ob schon ein Schutz für die vergangenen Kalenderwochen gesetzt ist, wird nur die 1. Zelle in Zeile 20 geprüft. Ist dort ein Blattschutz vorhanden, so wird für diese Spalte im Bereich der Zeilen 20 bis 37 kein Zellschutz aktiviert. Das Makro wird bei jeder Aktivierung des Blattes ausgelöst. Kopierst du das Blatt, wird das Makro mitkopiert.

Gruß

M.O.

0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi,

entsperre (wie M.O. geschrieben hat) alle Zellen im Bereich C20:BC37 und kopiere folgenden Code ins Codemodul der Tabelle "Leere Vorlage"

Private Sub Worksheet_Activate()
    Dim rngSpalte As Range
    If Me.Name <> "Leere Vorlage" Then
        ActiveSheet.Unprotect "1234"
        Set rngSpalte = Rows(19).Find(Application.WeekNum(Date, 21) - 1 & " KW", lookat:=xlWhole, LookIn:=xlValues)
        If Not rngSpalte Is Nothing Then
            Range(Cells(20, 3), Cells(37, rngSpalte.Column)).Locked = True
        End If
        ActiveSheet.Protect "1234"
    End If
End Sub

Diese Variante verhindert, dass der Code bereits in der Tabelle "Leere Vorlage" ausgeführt wird, falls du dort etwas ändern willst.

Außerdem brauchst du für die Ermittlung der Kalenderwoche keine solch komplizierte Formel - da reicht =KALENDERWOCHE(HEUTE();21) und die Zellformatierung Benutzerdefiniert: # "KW"

Bis später, Karin

0 Punkte
Beantwortet von

Cool... danke viel mal...

jedoch klappt es noch nicht mit dem ausführen . Habe mich ein wenig eingelesen und sehe nicht was ich falsch gemacht habe frown.. die makrosicherheit habe ich entsprechend angepasst und das Dokument neu geöffnen. Denke das ich evt beim einfügen einen fehler gemacht habe... hier die aktuelle Version 

gruss R.G

0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)
Meinen Beitrag hast du gelesen?

Bis später, Karin
0 Punkte
Beantwortet von
Gerade gesehen... (hatte den tab nicht aktuallisiert ^^) probiere es gerade aus
0 Punkte
Beantwortet von

@karin

Habe deine Anpassungen vorgenommen. Entweder bin ich zu blöde oder der Teufel liegt im Detail devil.

hier meine aktuelle Verison

0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi,

du hast im Vergleich zu deiner zuerst hochgeladenen Mappe eine Zeile eingefügt und den Text "KW" sowie die Zahl der KW in getrennte Zeilen geschrieben - folglich musst du den Code auch entsprechend ändern:

Private Sub Worksheet_Activate()
    Dim rngSpalte As Range
    If Me.Name <> "Leere Vorlage" Then
        ActiveSheet.Unprotect "1234"
        Set rngSpalte = Rows(20).Find(Application.WeekNum(Date, 21) - 1, lookat:=xlWhole, LookIn:=xlValues)
        If Not rngSpalte Is Nothing Then
            Range(Cells(21, 3), Cells(38, rngSpalte.Column)).Locked = True
        End If
        ActiveSheet.Protect "1234"
    End If
End Sub

Bis später, Karin

0 Punkte
Beantwortet von

Top ...Klappt! yeswink Besten dank euch.

Mfg R.G

...