Office: Funktionieren Code vereinfachen:Nach Eingabe User loggen und Zellen schreibschützen

Helfe beim Thema Funktionieren Code vereinfachen:Nach Eingabe User loggen und Zellen schreibschützen in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen, ich nutze momentan den unten stehenden Code bzw. den Code in der angehängten Datei. Läuft alles gut. Ich benötige nur Hilfe von... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Tom234, 10. Juni 2020.

  1. Funktionieren Code vereinfachen:Nach Eingabe User loggen und Zellen schreibschützen


    Hallo zusammen,

    ich nutze momentan den unten stehenden Code bzw. den Code in der angehängten Datei. Läuft alles gut. Ich benötige nur Hilfe von jemandem, der mir den Code kürzer machen kann. Wie immer schon einmal vielen Dank an alle, die hier Zeit investieren. Hie meine Fragen:

    1) Codeabschnitt 01
    Hier wird für die entsprechenden Spalten (z. B. A:A, C:C etc.) sichergestellt, dass in den rechts daneben vorhanden Spalten ("Letzte Änderung durch") die ID des Users geloggt wird, der die letzte Änderung vorgenommen hat. Weil nur der benutzte Bereich, überwacht werden soll, muss die die letzte Zeile des Tabellenblatts definiert sein. Das passiert hier über Spalte A.
    Ich habe jetzt den einen fast identischen Code 8x hintereinander – funktioniert, ist aber nicht sehr elegant. Ich müsste die Intersect-Bereiche nacheinander auflisten und dann rechts neben der aktiven Zelle die User ID loggen. Ich schaffe es aber schlichtweg nicht, daraus einen einzelnen Codeabschnitt zu machen. Es wäre toll, wenn sich das jemand diesbezüglich anschauen würde.
    Der Codeabschnitt 1 sieht so aus:

    Code:
    2) Codeabschnitt 02
    Hier wird Zeile 6 nach allen Treffern des Begriffs "Überprüfung“ durchsucht. Die Spalte jedes Treffers wird zunächst in der Variablen strAdrAusgabeB gespeichert. Im Anschluss wird geprüft, ob Einträge in der gespeicherten Spalte durchgeführt werden. Falls ja, werden die Zellen links daneben zur Bearbeitung gesperrt. Das sind in diesem Beispiel 16. Funktioniert auch super, aber: Gibt es eine Möglichkeit hier nicht über Offset zu gehen, sondern schlicht alle Zellen links von meiner aktiven Zelle/Target zu locken?

    Der Codeabschnitt 2 sieht so aus:
    Code:
    :)
     
    Tom234, 10. Juni 2020
    #1
  2. Hi Tom,

    mal so auf die Schnelle (ungetestet):
    Für Abschnitt1:
    Code:
    Generell sollte man gleichartigen, sich wiederholenden Code immer in eine sseparate Prozedur auslagern.... Das vereinfacht auch die Wartbarkeit und minimiert die Fehleranfälligkeit.

    und Abschnitt 2:

    Code:
     
  3. Hallo RJ,

    ich habe es ausprobiert, der Code funktioniert perfekt! Das ist für meine Zwecke vollkommen ausreichend. Vielen, vielen Dank.

    Hier noch mal die finale Version:

    Für die überwachte Tabelle
    Code:
    Für Modul 1:
    Code:
     
    Tom234, 12. Juni 2020
    #3
  4. Funktionieren Code vereinfachen:Nach Eingabe User loggen und Zellen schreibschützen

    ...wenn Du die ausgelagerte Prozedur in ein allg. Modul packst, dann solltest Du auch für die richtige Referenzierung sorgen. Nicht immer ist das ActiveSheet auch das, welches Du ansprechen willst und Range oder Cells bezieht sich dann auch immer nur auf das aktive Blatt....
    Du kannst aber die ausgelagerte Prozedur auch in das Modul der Tabelle packen. Wenn es nur dort benötigt wird, ist das eh kein Problem und die Sache mit der Referenzierung hat sich dann auch erledigt.

    Und weil der 8-malige Aufruf der gleichen Prozedur hintereinander auch unprofessionell aussieht und Weihnachten kurz bevorsteht, nun doch mit Schleife, ganz ohne Codeänderung in der ausgelagerten Prozedur:

    Code:
     
  5. Hallo RJ,

    ich bin schwer beeindruckt. Das funktioniert so wie es soll (so wie der ursprüngliche Code) und ist viel kürzer. Exakt danach habe ich gesucht. Vielen Dank. Der finale Code sieht jetzt so aus:

    Code:
    Das Ausgelagert-Sub habe ich nach wie vor in Modul 1, da es mehrere Tabs wie das hier besprochene geben wird.
     
    Tom234, 13. Juni 2020
    #5
  6. Dann solltest Du noch das jeweilige Sheet als Parameter übergeben und auch als Referenz verwenden oder wenigstens das richtige Blatt vorher zu aktivieren. Zumindest dann, wenn die externe Prozedur nicht vom Change Ereignis aus aufgerufen wird oder zwischendurch evtl. auch mal andere Blätter aktiviert werden sollten...
     
  7. Hallo RJ,

    ich habe mittlerweile dieses hier und vieles andere getestet. Ich habe hier folgendes Problem, worauf sich vermutlich u. a. Deine letzte Antwort bezieht. So wie in diesem Thread macht der User die Eingabe z. B. in Spalte A, verlässt jedoch nicht die Zelle (Cursor blinkt) und klickt ein anderes Tabellenblatt an. Dann stoppt der Code leider.

    Da ich das Stoppen des Codes in der Situation verhindern muss, benötige ich hier noch einmal Deine Hilfe. Die ausgelagerte Prozedur wird in der Tat aus dem Worksheet_Change_Sub aufgerufen und ist in einem separaten Modul.
    Auch nach überführen in das Modul der Tabelle funktioniert es leider nicht, wenn wie oben beschrieben ein anderes Tab aufgerufen. Ich glaube, dass Du das Problem schon vorher erkannt hast.

    Vermutlich ist es am cleversten das anzusprechende Tabellenblatt (im obigen Beispiel das mit der Zelle im Editiermodus) als Parameter an das ausgelagert Sub zu übergeben. Vermutlich würde es dann so aussehen: Sub Ausgelagert (target As Range, Spalte As String, LetzteZeileSpalteA As Long, wks as worksheet) und aufzurufen ist es mit Ausgelagert target, Chr(z + 65), LetzteZeileSpalteA, wks. Falls das so korrekt ist, wie muss ich dann das wks im nachfolgenden Code einbauen, damit der Eintrag korrekt gemacht wird und der Code nicht stoppt?

    Ich danke Dir wieder im Voraus! Heute bin ich wirklich am Ende *frown.gif*
     
    Tom234, 18. Juni 2020
    #7
  8. Funktionieren Code vereinfachen:Nach Eingabe User loggen und Zellen schreibschützen

    Kurzer Nachtrag:

    Im Zweifel fange ich den Fehler über einen Errorhandler ab und schließe die Datei ohne zu speichern wie folgt:

    Code:
    Lieber wäre mir natürlich eine funktionierende Lösung.
     
    Tom234, 18. Juni 2020
    #8
  9. Das ist eine Aussage ohne Wert. Oder soviel Wert, wie wenn ich sage, mein Shirt hat die gleiche Farbe wie das da.... na? Welche Farbe hat mein Shirt?
    Kleiner Tipp, die Farbe da, ist es nicht...*Smilie

    Du solltest also schon den Code zeigen, die Codezeile und die Debuggermeldung benennen.
    Zumal es definitv nicht daran liegt, dass die Eingabe nicht mit Enter abgeschlossen wurde (by this way.... wer macht denn sowas und warum?). Ist aber egal, auch wenn ohne Enter eine andere Tabelle gewählt wird, tritt das Change Ereignis der Zelle mit der nicht abgeschlossenen Eingabe ein.
     
  10. Hallo RJ,

    ja, Du hast Recht mit der Farbe *rolleyes.gif*

    Ich habe noch mal anbei die Datei mit dem Code, der zum Debugmodus führt. Wenn man jetzt also in eine gelbe markierte Zelle in Tabelle 2 geht, im Editiermodus verbleibt und auf den Reiter von Tabelle 1 klickt, kommt folgender Fehlercode: Laufzeitfehler '1004'. Die Methode 'Intersect' ist für das Objekt '_Global' fehlgeschlagen. Im Debugger färbt er die entsprechende Intersectzeile im Modul 1 im Ausgelagert-Sub gelb.
    Die Zeilen für die Fehlerbehandlung habe ich jweils mit einem Apostroph als Kommentar markiert. Wenn man wie beschreiben vorgeht und die Fehlerbehandlung ist aktiv, fliegt man sozusagen raus ohne zu speichern.

    Hier auch noch mal der Code für Tabelle 2 - es geht um Codeabschnitt 01 und das Ausgelagert-Sub in Modul 1(kennst Du ja):
    Code:
    Und hier der Code von Modul 1 (mit Kommentar/Fehlerbehandlgung):
    Code:
    Wer so warum arbeitet? Die alltägliche Beschäftigung mit der Frage kostet mich Nerven. Das kann man sich nicht vorstellen.
     
    Tom234, 19. Juni 2020
    #10
  11. Hi Tom,

    nur mal auf die Schnelle, ohne weitere Erklärungen, weil ich heute nicht dazu komme. Vielleicht findest Du ja die Unterschiede selbst....
     
  12. Hi RJ,

    ich hatte es zwischenzeilich selber mit der Übergabe des Tabellenblatts als Paremter ausprobiert. Die Verwenung im Ausgelagert-Tab hatte ich aber nicht hingekriegt - daher danke für die with/end-Sache. Es muss nicht mehr debuggt werden.
    Er schreibt jetzt allerdings die User-ID in die Tabelle 1, in die während der Eingabe gewechselt wird - sie ist dann ja die aktive Tabelle. Die ID soll jedoch in Tabelle 2 stehen, wo die Änderung durchgeführt wurde.
    Um das zu lösen, habe ich die Tabellenblatt-ID der target-Zelle über

    Code:
    als Parameter übergeben. Und jetzt kann man aus dem Editiermodus von Tabelle 2 in 1 wechseln und trotzdem wird die User-ID in Tabelle 2 eingetragen.

    Anbei noch mal die (hoffentlich) finale Datei.

    Prima, damit kann ich ins Rennen gehen! *Smilie

    Viele Grüß,
    Tom
     
    Tom234, 19. Juni 2020
    #12
  13. Funktionieren Code vereinfachen:Nach Eingabe User loggen und Zellen schreibschützen

    Hi Tom,

    war gestern in Eile, deshalb hatte ich nur kurz draufgeschaut und geantwortet. Die
    hat allerdings nichts mit dem eigentlichen Fehler zu tun. Die With Anweisung erspart nur die wiederkehrende Angabe des über With angegebenen Objektes bis zum Ende dieses With. Soll hießen, wenn man via With immer wieder das Objekt Tabelle1 (oder welches auch immer) verwenden will, dann gibt man das nach dem With an und kann dann innerhalb der With Anweisung alle Eigenschaften oder Methoden aufrufen, indem man vor diese lediglich einen Punkt setzt.

    Das hier:
    hat gar nichts zu bedeuten. Nur, weil der Debugger nicht anspringt, bedeutet das ja nicht, dass der Code Fehlerfrei ist. Der Debugger bemängelt nur Syntaxfehler. Logische Fehler winkt er eiskalt lächelnd durch, denn er weiß ja nicht, ob die Logik des Codes auch der gewünschten Logik entspricht. Solche Fehler sind besonders gefährlich und können ewig unentdeckt bleiben.
    Das Ausbleiben des Debuggers in diesem speziellen Fall hängt damit zusammen, weil ich hier:
    Code:
    das AvtiveSheet an dieser Stelle entfernt hatte:
    Code:
    Das ActiveSheet könntest Du durch ein Me ersetzen (dann bezieht es sich auf das Objekt des aktuellen Tabellenmoduls).

    Womit wir bei Deiner Logik wären...
    Noch mal, was willst Du eigentlich? Werte aus Tabelle1 in Tabelle2 schreiben? Oder wie jetzt?
     
  14. Hallo RJ,

    danke für Deine Antworten.

    Ziel ist Folgendes:
    1: Bearbeiter 1 macht Überträge in diese Datei.
    2: Es wird in der Zelle rechts neben dem Eintrag die ID des Bearbeiters geloggt
    3: Ein zweiter / anderer Bearbeiter überprüft die Einträge

    Das Loggen der ID soll hier passieren, damit direkt erkennbar ist, wer die Daten hier eingetragen hat. Ein Nachteil an dem Code ist, dass er die ID auch ändert, wenn ich in die Zelle zwecks Editieren gehe und gar keine Änderung mache. Daher weiß ich noch nicht, ob der Code so für immer Bestand haben wird.

    Im Grund hat das nichts mit der Tabelle1/Tabelle2-Problematik zu tun, die wir hier gelöst haben. Das kam nur auf, weil gleich mehrere (!) Bearbeiter in der Testphase im Editiermodus auf die Idee gekommen sind das Tab zu wechseln.
     
    Tom234, 24. Juni 2020
    #14
Thema:

Funktionieren Code vereinfachen:Nach Eingabe User loggen und Zellen schreibschützen

Die Seite wird geladen...
  1. Funktionieren Code vereinfachen:Nach Eingabe User loggen und Zellen schreibschützen - Similar Threads - Funktionieren Code vereinfachen

  2. Zellenformatierung und =Summe() funktionieren nicht

    in Microsoft Excel Hilfe
    Zellenformatierung und =Summe() funktionieren nicht: Hallo Zusammen, ich habe aus einem externen Programm Daten erhalten. Diese muss ich noch Formatieren (0.00 "m") und zusammen rechnen. Ich habe dies wie auf dem gewohnten Wege gemacht, erhalte...
  3. Formeln funktionieren nicht richtig

    in Microsoft Excel Hilfe
    Formeln funktionieren nicht richtig: Hallo zusammen, ich habe eine Excel mit einem ganz merkwürdigen Verhalten. Darin ist eine externe Datenverbindung. Wenn ich diese aktualisiere, dann liefern plötzlich alle Formeln den Fehler...
  4. ActiveX Steuerelemente funktionieren nicht richtig

    in Microsoft Excel Hilfe
    ActiveX Steuerelemente funktionieren nicht richtig: Guten Abend zusammen, ich habe folgendes Problem: Die ActiveX-Steuerelemente funktionieren auf einem Tabellenblatt nicht richtig. In einer UserForm geht alles ohne Probleme. Bei den...
  5. Fortlaufende Berechnungen funktionieren nicht

    in Microsoft Excel Hilfe
    Fortlaufende Berechnungen funktionieren nicht: Hallo, ich habe eine Tabelle in erstellt die ich mit Hilfe einer (sicher nicht sehr professionellen) VBA User Form erweitern möchte. Die Userform funktioniert soweit auch. Allerdings wir die...
  6. Tastaturbefehle Ctrl + C, Ctrl + V, Ctrl + X funktionieren in Word nicht mehr

    in Microsoft Word Hilfe
    Tastaturbefehle Ctrl + C, Ctrl + V, Ctrl + X funktionieren in Word nicht mehr: Hallo zusammen Seit kurzem funktionieren in Word die Tastauturbefehle für Kopieren, Einfügen, Ausschneiden nicht mehr. Das Problem tritt nur in Word auf – überall sonst funktionieren die Kürzel....
  7. PQ Abfragen funktionieren nach Update nicht mehr

    in Microsoft Excel Hilfe
    PQ Abfragen funktionieren nach Update nicht mehr: Guten Morgen Excel Gemeinde, nachdem wir nun von Excel 2010 auf 2016 umgestellt wurden, funktionieren fast alle in 2010 erstellten PQ Abfragen nicht mehr. Die Fehlermeldung ist bei allen Abfragen...
  8. Jabra Geräteanrufsteuerelemente funktionieren nicht mehr

    in Microsoft Teams Hilfe
    Jabra Geräteanrufsteuerelemente funktionieren nicht mehr: Hallo zusammen MS Teams Version 1.3.00.21759 (64-Bit). Ich habe seit neuem das Problem, dass Teams mir folgende Meldung in anzeigt in einem Meeting: "Keine Geräteanrufsteuerelemente Beenden Sie...
  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