Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1532to1536
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

Telefonplan für die Woche

Telefonplan für die Woche
14.01.2017 11:35:55
Armando
Als erstes wünschen allen einen wunderschönen Guten Morgen :)
Ihr habt echt hier ein super Forum geschaff, dass man auch ohne Kentnisse in VBA, trotzdem noch einiges (mit ein wenig Übung) zustande bringen kann.
Ich erkläre erst mal was ich bräuchte und muss sagen, dass ich echt 0 Ahnung von VBA habe aber ich will mich mit dem Thema beschäftigen bzw. ich hab schon angefangen.
Ich habe einen Telefonplan, welches 5 Blätte von Montag bis Freitag beinhaltet. In diesem Telefonplan werden von 8:00 bis 18:00 in je 30 min schritten einen T eingetragen. Links stehen die Namen der Personen von oben nach unten und oben stehen die Zeiten in 30 min (8:00 - 8:30... usw.) Es soll erreicht werden, dass man maximal eine bestimmte Anzahl von Personen eintragen dürfen. Diese funktion wird aber umgegangen sofern man die Draganddrop funktion mit der Maus nutz, dass aber nicht so schlimm ist da manchmal halt eine Überdeckung sich nicht vermeiden lässt.
Nun haben wir aber oft das Problem, dass bestimmte Personen sich nicht an den Regeln halten und noch am gleichen Tag deren Telefondienst einfach ändern und erzeugen dadurch eine Unterdeckung, obwohl gesagt wurde, dass man keine Änderung am gleichen Tag ohne Genehmigung des Vorgesetzen machen darf.
Nun habe ich die Idee gehabt, sämtliche Änderungen durch einen Extra Blatt (hier "Protokoll")zu Protokollieren welches nur bestimmte User einsehen dürfen. Propblem ist aber dass genau die DragandDrop funktion nicht protokolliert wird, sofern man diese Funktion mehr als 2 Felder nutzt. Nun könnte man diese Funktion komplett abschalten und die Angrenzung des Wertes entfernen da ja sowieso dann alles protokolliert wird (bitte erst mal den Punkt Datenschutz bei seite legen da dieses noch geklärt wird).
Eine andere Möglichkeit wäre einfach das Blatt zu schützen sobald das heutige Datum erreicht wurde. Jedes Blatt hat einen Datum und die =Jetzt() funktion so, dass wenn jetzt größer ist als das Datum im Blatt, das ganze Blatt gesperrt wird. Leider hab ich nichts dergleichen gefunden :(.
Damit man gezwungen wird die Makros zu starten (da sonst das alles nicht funktioniert) hab ich alles xlveryhidden und lediglich einen Deckblatt erstellt. Sobald die Makros aktiviert wurde kann man dann im Deckblatt die Schaltfläche anklicken damit folgendes Passiert:
Sub Arbeitsblaetter_einblenden()
'hier werden soweit Makro aktiviert wurden die Arbeitsblätter angezeigt
Worksheets("Montag").Visible = xlSheetVisible
Worksheets("Dienstag").Visible = xlSheetVisible
Worksheets("Mittwoch").Visible = xlSheetVisible
Worksheets("Donnerstag").Visible = xlSheetVisible
Worksheets("Freitag").Visible = xlSheetVisible
Worksheets("start").Visible = xlSheetHidden
'hier werden die Berechtigungen für den Protokoll vergeben ("user")
If Environ("username") = "xxx" Then 'user anpassen!
Worksheets("Protokoll").Visible = xlSheetVisible
End If
'##Application.CellDragAndDrop = False 'hier wird das ziehen mit der Maus verhindert
End Sub
das klappt auch echt wunderbar da sobald jemand was ändert ja alles protokolliert wird durch
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim ErsteFreieZeile As Long
If Target.Count > 1 Then Exit Sub
If Sh.Name = "Protokoll" Then Exit Sub
If Intersect(Target, Sh.Range("C9:V55")) Is Nothing Then Exit Sub
With Sheets("Protokoll")
ErsteFreieZeile = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Cells(ErsteFreieZeile, 1) = Sh.Name
.Cells(ErsteFreieZeile, 2) = Target.Address(0, 0)
.Cells(ErsteFreieZeile, 3) = Target.Value
.Cells(ErsteFreieZeile, 4) = Date
.Cells(ErsteFreieZeile, 5) = Time
.Cells(ErsteFreieZeile, 6) = Environ("username")
End With
End Sub

und dann speichern will folgendes passiert:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
Cancel As Boolean)
a = MsgBox("Möchten Sie wirklich speichern?", vbYesNo)
If a = vbNo Then Cancel = True
Worksheets("Protokoll").Visible = xlSheetVeryHidden
Worksheets("start").Visible = xlSheetVisible
Worksheets("Montag").Visible = xlSheetVeryHidden
Worksheets("Dienstag").Visible = xlSheetVeryHidden
Worksheets("Mittwoch").Visible = xlSheetVeryHidden
Worksheets("Donnerstag").Visible = xlSheetVeryHidden
Worksheets("Freitag").Visible = xlSheetVeryHidden
End Sub
Somit werden Änderungen protokolliert und sobald der nächste sich eintragen will das gleiche wieder aktiviert werden muss.
Man muss sagen, dass ich echt keine Ahnung davon habe und lediglich durch eure Hilfe und logisches Denken das hingekriegt habe.
Könnt ihr mir helfen und mir einen Tipp geben, dass sobald ein Datum erreicht wurde keine Änderungen mehr möglich sind? Ich hab nun im Blatt im Feld "X1" die Formel drin wenn das Datum "jetzt"(A1) älter ist als das Datum im Blatt (R1) dann einen bestimmten Wert ausgegeben wird. Wenn dieser Wert = 0 (X1) ist dann soll das Blatt "passwort geschutzt" werden so, dass lediglich der Vorgesetze die Änderungen am gleichen Tag durchführen kann. Somit könnte man das Protokoll sparen da ich dadurch genau das verhindere was ich möchte oder gibt es einen VBA Code der sies ermöglich?
Bitte denkt dabei, dass ich echt keine ahnung davon habe :D Ihr könnt auch gerne eure Anregungen und Verbessrungsvorschläge mitteilen.
Vielen Dank und schönes Wochenende :)

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nachfrage
14.01.2017 13:46:43
Tino
Hallo,
du schreibst so viel das ich eigentlich nicht weis was du möchtest,
nur das du irgendwas schützen möchtest?!
Kannst Du ein Beispiel hochladen und kurz Beschreiben was erreicht werden soll?
Gruß Tino
AW: Nachfrage
14.01.2017 14:50:01
Armando
Danke Timo für dein interesse.
Tut mir Leid, dass ich so viel geschrieben habe. Wenn ich es mir selbst anschaue, würde ich das alles auch nicht lesen wollen ^^ eindeutig too much.
hier ein Beispiel:
https://www.herber.de/bbs/user/110545.xlsm
Ich versuche es, dass sofern A2 =jetzt() älter ist als das Datum im R1 das Blatt gesperrt wird und nur durch eingabe eines Passwortes was ändern kann.
Anzeige
Evtl. komme ich später dazu
14.01.2017 14:55:05
Tino
Hallo,
muss jetzt noch was erledigen.
Vielleicht schaue ich später noch vorbei und wenn die Frage noch offen ist versuche ich zu helfen.
Gruß Tino
AW: Nachfrage
14.01.2017 14:55:51
Armando
Kann man aus einen Wert, z.B. hier X1 wenn gleich 0 Änderungen im Blatt (in diesem Fall nur Monatg) nur möglich durch eingabe eines Passwortes machen?
AW: Nachfrage
15.01.2017 10:14:02
Tino
Hallo,
kannst mal testen vielleicht gehts so. (nicht alle Varianten getestet)
Kennwort für den Schutz der Tabelle ist Test, siehe auch im Modul1.
https://www.herber.de/bbs/user/110561.xlsm
Gruß Tino
AW: Nachfrage
15.01.2017 17:03:37
Armando
Hallo Timo,
vielen Dank für deine Hilfe.
Ich habe die Tabelle heruntergeladen und das Datum so geändert, dass der Wert 0 ist aber ich kann weiterhin was in der tabelle eintragen.
Muss ich da vorher noch was machen?
Anzeige
AW: Nachfrage
15.01.2017 19:27:48
Armando
Es funktioniert Tino,
Danke!!!!
eine kleinigkeit noch... vllt findest du den Fehler.
Ich hab da noch eine Protokollseite, die lediglich für bestimmte User angezeigt wird (VBA COde werde ich dann wenn fertig selbst mit einem Code speichern).
Protokollcode hat eigentlich funktioniert. Nun hab ich das in eingefügt und nun funzt er nicht mehr. Weißt du vllt warum?
Hier die fertige Datei

Die Datei https://www.herber.de/bbs/user/110571.xlsm wurde aus Datenschutzgründen gelöscht


Ich schulde dir was :) Wenn du nicht so weit wohnst gebe ich dir einen aus :D
Anzeige
AW: Nachfrage
15.01.2017 20:27:22
Tino
Hallo,
komme erst morgen dazu, schreibe vom Handy!
Gruß Tino
AW: Nachfrage
17.01.2017 22:48:31
Armando
geht leider immer noch nicht...
ich habe das erst mal so gelöst:
Private Sub Worksheet_Activate()
If Range("x1") = 1 Then Exit Sub
ActiveSheet.Protect Password:="xxx"
On Error Resume Next
If ActiveSheet.ProtectContents = False Then GoTo Fehler
ActiveSheet.Unprotect
Exit Sub
Fehler:
ActiveSheet.Protect "xxx"
End Sub
aktiviert Blattschutz und es erfüllt erstmal seinen Zweck :)
Anzeige
AW: Nachfrage
17.01.2017 23:05:13
Armando
wobei... er führt das nur beim ersten blatt den Schutz durch :(
AW: Nachfrage
18.01.2017 00:23:21
Armando
Dein Code funktioniert EINWANDFREI!!!
Ich hab lediglich deaktiviert, dass die Inbox auftaucht. Musste noch die alten geschützen Blätter entschützen mit dem alten PW und erst dann dein Code einfügen.
Auf die idee musste ich erst mal kommen ^^
Danke

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige