Office: VBA Tabellenblatt Zellinhaltabhängig schützen

Helfe beim Thema VBA Tabellenblatt Zellinhaltabhängig schützen in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo, ich habe da eine kleine Frage. Das mit dem Schützen ist ja kein Problem: ActiveSheet.Protect "meinPW" Jetzt möchte ich ein Projekt... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von dienheimer, 23. November 2010.

  1. dienheimer Erfahrener User

    VBA Tabellenblatt Zellinhaltabhängig schützen


    Hallo,

    ich habe da eine kleine Frage.

    Das mit dem Schützen ist ja kein Problem:

    ActiveSheet.Protect "meinPW"

    Jetzt möchte ich ein Projekt nur schützen können wenn
    in einem gewissen Zellbereich der Wert stimmt.

    Konkret mein Fall:

    In Zelle A8 bis A14, A16 und A18 bis A19 können Personen eingetragen werden. Die Ausgabe der Berechnungszeiten erfolgt in den Zellen
    B127 bis B133 , B135 und B137 bis B138. Die Berechnungszeiten müssen innerhalb von -4 bis +4 liegen damit die Sperrung ausgeführt wird. Bei nichteinhalten soll ein Meldefenster aufgehen mit dem entsprechenden Hinweis.
    Die Abfrage der Werte in den B-Zellen soll aber nur erfolgen wenn in den A-Zellen auch wirklich eine Person eingetragen ist.

    ( Ist z.B. die Zelle A16 leer dann muss die Zelle B135 nicht geprüft werden.


    Wie macht man eine solche Abfrage?


    Danke und Gruß

    Markus
     
    dienheimer, 23. November 2010
    #1
  2. miriki Erfahrener User
    Also, wenn ich das richtig verstehe...

    * Anfänglich ist das Blatt nicht geschützt.
    * Jetzt trägt jemand Werte (Namen) in die Zellen Ax ein.
    * Über Formeln werden Zeiten in Bx berechnet.
    * Ergibt Bx weniger als -4 oder mehr als +4 bleibt das Blatt entsperrt, ansonsten wird das Blatt gesperrt.

    Was ich nicht verstehe: Wenn ich in A8 einen Namen eintrage und B127 ergibt 0, dann wird das Blatt ja gesperrt. Demnach kann ich keinen weiteren Namen mehr in z.B. A9 eintragen. Soll das so sein?

    Ich glaub, die Definition, wann das Blatt ge-/entsperrt werden soll, mußt Du nochmal genauer überdenken und ausformulieren.

    Gruß, Michael
     
  3. dienheimer Erfahrener User
    Hallo miriki.

    Ja, das soll so sein.
    Es handelt sich um einen Arbeitsplan in dem nicht immer alle Spalten
    benötigt werden.
    Es sind in einem Jahr mal drei und im anderen zb. acht.
    Der Plan wird erstellt und hat eigentlich bestand.

    Wenn es jetzt zu einer Arbeitszeitverschiebung kommt, kann ein
    berechtigter Personenkreis die Arbeitsmappe entsperren und dann
    den Plan ändern. Man sollte meinen, dass jeder dann auch die Richtigkeit
    seiner Arbeit prüft und das Fenster von +/- 4 einhält.
    Leider hat die Erfahrung gezeigt, dass es nicht so ist.
    Also soll die Mappe nur zu schützen sein, wenn das Zeitfenster stimmt.
    Stimmt es nicht soll eine Meldung daran erinnern.

    Da die Anzahl der Namen nicht voraussehbar ist, soll nur geprüft werden wo auch etwas drinsteht.

    Ich hoffe ich konnte jetzt besser erklären worum es geht.

    Gruß Markus
     
    dienheimer, 23. November 2010
    #3
  4. miriki Erfahrener User

    VBA Tabellenblatt Zellinhaltabhängig schützen

    Also, nur um sicher zu gehen:

    Demnach ist das Arbeitsblatt gesperrt, wenn man die Mappe öffnet? Der Bearbeiter entsperrt dann das Blatt und macht seine Eintragung. Wenn -4 .. +4 herauskommt, wird das Blatt (automatisch) gesperrt und die Mappe kann mit den Änderungen gespeichert werden. Soll eine weitere Eintragung geschehen, muß das Blatt vorher (manuell) entsperrt werden. Ist das Ergebnis außerhalb, kommt eine Meldung und das Blatt bleibt entsperrt.

    In dem Fall würde ich den Ansatz über das Ereignis "Calculate" des Blatts verfolgen. Das wird aufgerufen, wenn Formeln neu berechnet werden müssen. In einer Schleife könnte dann Ax durchlaufen werden und die passende Bx überprüft werden.

    Alternativ könnte man auch das "Change" Ereignis abgreifen, das bei jeder Änderung im Blatt aufgerufen wird. Dort hat man dann als Parameter "Target" die geänderte Zelle. Liegt die im Ax-Bereich und ist nicht leer, kann die passende Bx überprpüft werden. Ist letztendlich vielleicht die etwas elegantere Methode.

    Aber vielleicht als zusätzliche Maßnahme: Die Formeln in Bx sollten vielleicht selbst schon abtesten, ob die entsprechende Ax mit einem Namen versehen ist. Wenn nein, könnte "" (leere Zelle) als Ergebnis kommen. Also eine einfache WENN(Ax<>"";Berechnung;"") Geschichte.

    Wenn der Ablauf wirklich so in der Art abläuft, dann kann man da relativ schnell was machen.

    Gruß, Michael
     
  5. dienheimer Erfahrener User
    Guten Morgen.

    Im Grunde ist das so richtig, nur soll die Sperrung erst mit einer
    Schaltfläche ausgelößt werden. Mit dieser soll dann zuvor die
    +/- 4 Prüfung ausgeführt werden.


    Zu dem teil von Miriki:

    Aber vielleicht als zusätzliche Maßnahme: Die Formeln in Bx sollten vielleicht selbst schon abtesten, ob die entsprechende Ax mit einem Namen versehen ist. Wenn nein, könnte "" (leere Zelle) als Ergebnis kommen. Also eine einfache WENN(Ax<>"";Berechnung;"") Geschichte.

    Das geht leider nicht, da die Berechnung nur eine Ausgabe von mehreren
    Berechnungsblättern ist. Die Eingabemöglichkeiten sind so vielfältig und mit mehreren wenn/dann abfragen versehen, dass ich alles auf mehrenen Arbeitsblättern verteilen mußte.
    Die Zellen Bx geben nur eine Adition der einzelnen Blätter aus.

    Gruß

    Markus
     
    dienheimer, 24. November 2010
    #5
  6. dienheimer Erfahrener User
    Hallo.

    Ich habe mal etwas geschrieben, wie ich es mir vorstelle:

    code:

    If (Range("A8") = "text" and Range("B127") = +/-4) and
    If (Range("A9") = "text" and Range("B128") = +/-4) and
    If (Range("A10") = "text" and Range("B129") = +/-4) and
    If (Range("A11") = "text" and Range("B130") = +/-4) and
    If (Range("A12") = "text" and Range("B131") = +/-4) and
    If (Range("A13") = "text" and Range("B132") = +/-4) and
    If (Range("A14") = "text" and Range("B133") = +/-4) and
    If (Range("A16") = "text" and Range("B135") = +/-4) and
    If (Range("A18") = "text" and Range("B137") = +/-4) and
    If (Range("A19") = "text" and Range("B138") = +/-4)

    Then goto Weiter
    or goto stop


    weiter:

    ActiveSheet.Protect "meinPW"

    stop:

    Application.Run ("Fehlermeldung")


    code ende



    Da ich VBA so gut wie nix drauf habe, ist die Funktion natürlich nicht gegeben.

    Vielleicht kann mir aber jemand zeigen wie man es richtig schreibt.

    Gruß und dank

    Markus
     
    dienheimer, 25. November 2010
    #6
  7. miriki Erfahrener User
    Aber schonmal gar nicht so schlecht...

    Mit dem Ding im Anhang müßte es eigentlich so klappen, wie Du es Dir vorstellst...

    Gruß, Michael
     
  8. dienheimer Erfahrener User

    VBA Tabellenblatt Zellinhaltabhängig schützen

    Hallo miriki.

    Das war doch ein scherz oder?

    Irgendwie hat Deine Lösung so gar nichts mit meiner zu tun :-)

    Besonders die Funktionen unterscheiden sich. Deine Version geht
    meine nicht.

    Vielen Dank für die Hilfe.


    Eine Frage hätte ich noch!

    Kann man das Speichern bzw. Schließen der Datei verhindern wenn die
    Mappe ( in dem Fall: "Eingabe" ) nicht geschützt ist?


    Gruß

    Markus
     
    dienheimer, 26. November 2010
    #8
  9. miriki Erfahrener User
    Nein, war durchaus ernst gemeint, denn: Der logische Grundgedanke war gegeben, auch wenn die Syntax nicht paßte. Das ganze nennt sich dann "Pseudo-Code" und wird durchaus oft verwendet, um Gedanken klar zu stellen, ohne sich um die Details der Programmierung kümmern zu müssen.

    Doch, aber ich habe sie etwas abgewandelt. Dein Entwurf hat in einer großen "und"-Verknüpfung alle Zellen überprüft, ich habe das in einer Schleife einzeln gemacht. Der Effekt ist aber (fast) der gleiche.

    Yup... Genau die Ereignisse "VorSpeichern" bzw. "VorSchliessen" kann man dazu abgreifen, den Blattschutz überprüfen und ggf. das Speichern / Schließen verhindern.

    Ich hab das Makro mal etwas umgestaltet: Die Routine "Werte_ueberpruefen" hab ich in ein separates Modul gepackt und "public" deklariert, außerdem aus der einfachen "Sub" eine "Function" gemacht, die einen Wert zurückliefert, nämlich "wahr" für "keine Fehler" bzw. "falsch" für "mind. 1 Fehler aufgetreten". [edit: quatsch, umgekehrt natürlich...]

    Diese Routine kann dann nämlich auch von der "Workbook"-Ebene (und nicht nur auf Worksheet-Ebene) aufgerufen werden. Jetzt wird diese Funktion vor jedem Speichern und Beenden aufgerufen. Wird ein Fehler entdeckt, wird das Speichern bzw. Beenden abgebrochen und man muß zuerst den Fehler beheben.

    Den Aufruf habe ich geringfügig differenziert... Während der Button ja direkt auf dem Blatt ist, wo auch die Werte überprüft werden sollen, kann von dort aus, sozusagen "universell", der Name des Blatts an die Routine per "activesheet.name" übergeben werden.

    In der etwas globaleren Workbook-Ebene ist aber nicht gewährleistet, daß das zu überprüfende Blatt auch gerade das aktive Blatt ist. Deswegen habe ich hier mal "konstant" den Namen "Tabelle1" des Blatts eingesetzt.

    Gruß, Michael
     
  10. dienheimer Erfahrener User
    Hallo miriki.

    Also ich mußte ja den Text midestens drei mal lesen bis ich
    verstanden habe was Du gemeint hast.

    Mitlerweile habe ich es verstanden und die Änderungen bei mir vorgenommen.

    Es klappt alles super ( war auch nicht anders zu erwarten ).

    tausend Dank für die schnelle, kompetente und freundliche Hilfe.


    Diese Seite muß man jedem Hilfsbedürftigen weiterempfehlern.
    Ihr seit spitze.


    Nochmals Danke und Gruß

    Markus
     
    dienheimer, 26. November 2010
    #10
Thema:

VBA Tabellenblatt Zellinhaltabhängig schützen

Die Seite wird geladen...
  1. VBA Tabellenblatt Zellinhaltabhängig schützen - Similar Threads - VBA Tabellenblatt Zellinhaltabhängig

  2. VBA Code Tabellenblatt kopieren und UserForm

    in Microsoft Excel Hilfe
    VBA Code Tabellenblatt kopieren und UserForm: Hallo, ich hoffe mir kann jemand helfen. Schon mal vielen Dank für die Unterstützung. Folgende Thematik: In dem Blatt 1 ist ein ComandButton. Mit Klick soll über VBA folgendes abgefragt...
  3. Tabellenblätter aus Vorlagen-Tabellenblatt generieren mit dynamischen Anpassungen durch Vorgaben

    in Microsoft Excel Hilfe
    Tabellenblätter aus Vorlagen-Tabellenblatt generieren mit dynamischen Anpassungen durch Vorgaben: Hallo, ich suche gerade eine Möglichkeit mittels VBA mehrere Tabellenblätter auf einmal zu generieren (ca. 40), die auf einem Vorlage-Tabellenblatt (TB2) basieren. Das kopieren/ Vervielfachen an...
  4. Zeilen aufgrund von bestimmten Informationen in anderes Tabellenblatt kopieren

    in Microsoft Excel Hilfe
    Zeilen aufgrund von bestimmten Informationen in anderes Tabellenblatt kopieren: Hallo zusammen, ich bin erst vor ein paar Tagen auf die Excel VBA gestoßen und kenne mich deswegen leider so gut wie gar nicht aus. Ich würde gerne aus den Tabellen 3 - 11, bestimmte Zeilen in die...
  5. VBA Zellbereiche anhand einer Suchvariable in neues Tabellenblatt kopieren

    in Microsoft Excel Hilfe
    VBA Zellbereiche anhand einer Suchvariable in neues Tabellenblatt kopieren: Hallo Ihr Lieben, leider bin ich in VBA nicht sehr gut bewandert und arbeite meistens nach Search, try and error, oder mit Formeln. Normalerweise werde ich so auch meistens fündig, dank der vielen...
  6. [VBA] Daten auf Grund von Variable auf anderes Tabellenblatt kopieren

    in Microsoft Excel Hilfe
    [VBA] Daten auf Grund von Variable auf anderes Tabellenblatt kopieren: Hallo zusammen, vorab großes Lob an das Forum, ich konnte schon einige Dinge sinnvoll für mich nutzen, meine VBA Skills beschränken sich sonst eher auf das Anpassen von aufgezeichneten Makros...
  7. VBA - Zeilen je nach Bedingung in neues Tabellenblatt verschieben und löschen

    in Microsoft Excel Hilfe
    VBA - Zeilen je nach Bedingung in neues Tabellenblatt verschieben und löschen: Hallo liebe Excel-Kommunity, nach ewigen Stunden des Suchens und Rumprobierens bin ich an dem Punkt angekommen an dem ich verzweifelt um eure Hilfe fragen muss. Da ich leider keinerlei...
  8. Hyperlink VBA / Automatische Ergänzung

    in Microsoft Excel Hilfe
    Hyperlink VBA / Automatische Ergänzung: Guten Tag zusammen, ich habe folgendes Problem: Ich habe eine Datei mit insgesamt ca 50. Tabellenblättern. Auf dem Tabellenblatt Tabelle 1 ist die Gesamtübersicht mit allen Gesellschaften,...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden