Office: LFZ 9

Helfe beim Thema LFZ 9 in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo liebe Gemeinde, ich schreibe seit langem mal wieder ein VBA Script. Es soll für uns intern ein abgeschafftes DispoTool ersetzen, soviel nur am... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von moses-ms, 13. Oktober 2015.

  1. LFZ 9


    Hallo liebe Gemeinde,
    ich schreibe seit langem mal wieder ein VBA Script. Es soll für uns intern ein abgeschafftes DispoTool ersetzen, soviel nur am Rande. Da das Script natürlich all unsere Wünsche erfüllen soll (auch meine :-)) versuche ich alles umzusetzen. Folgendes Probleme habe ich, ich füge mittels VBA Code direkt Code in die Tabelle ein, da alle eingaben in Großbuchstaben geändert werden sollen und mittels Doppelklick ein Kommentarfenster geöffnet werden soll.
    Folgenden Code verwende ich dafür:
    Code:
    Der Code ist nicht das eigentliche Problem :-/ sondern das Einfügen in den Tabellencode. Führe ich das Makro aus erscheint der LFZ 9. Wechsel ich dann in den Debugmodus wird die Zeile "ThisWorkbook.VBProject.VBComponents(Worksheets(WKS_BigLetter).CodeName).CodeModu le" markiert. Dann breche ich das Script mit "Zurücksetzen" ab und lasse den VBA Editor geöffnet. Führe ich das Script DANN erneut aus, funktioniert alles ohne Probleme.*confused.gif*

    Wo ist mein Fehler der durch das Öffnen des VBA Editors behoben wird?
    Dim WKS_BigLetter as String ohne Erfolg, auch das füllen von WKS_BigLetter mit einem festem Wert brachte keinen Erfolg.

    :)
     
    moses-ms, 13. Oktober 2015
    #1
  2. Hallo,

    das hohe Ziel
    wird schon in der ersten Codezeile verfehlt:
    Code:
    Was, wenn mal mehr als eine Zelle (z. B. per Copy&Paste) geändert wird?
    Zudem sollten die Ereignisse deaktiviert werden, solange in dem Change-Ereignis Änderungen verursacht werden.

    Aber zur eigentlichen Frage: Ich kann das Problem nicht nachvollziehen - der Code läuft bei mir an sich.
    Aber ich stelle mir immer die Frage, warum man zum einen Änderungen des VBA-Projektes zulassen muss (Sicherheitslücke!) und zum anderen, warum es überhaupt für notwendig erachtet wird, Code zu Laufzeit zu ändern.
    Wenn Du Deine Gedanken und Dein Vorhaben schilderst, findet sich vielleicht ein ganz anderer Weg.

    Grüße
    EarlFred
     
    EarlFred, 15. Oktober 2015
    #2
  3. Beverly
    Beverly Erfahrener User
    Hi,

    ich konnte dein Problem nachvollziehen, obwohl mir die Ursache unklar ist. Nach Schließen von Excel und Neustart trat der Fehler nicht mehr auf.

    Weshalb benutzt du nicht stattdessen ein Vorlage-Tabellebnlatt, bei dem der Code bereits enthalten ist und welches einfach nur kopiert werden muss? Außerdem kann man den Code als solchen auch für alle Tabellenblätter zugängig machen, indem man nicht das Change-Ereignis des Tabellenblattes sondern das SheetChange-Ereignis unter DieseArbeitsmappe benutzt.


    LFZ 9 grusz.gif
     
    Beverly, 15. Oktober 2015
    #3
  4. LFZ 9

    Hallo moses-ms,

    ich mach das immer so: Code:
    Gruß von Luschi
    aus klein-Paris
     
  5. Danke erst einmal für die Antworten bzw. Lösungsvorschläge, anbei meine Antworten dazu:

    EarlFred:
    Ich Frage über eine InPutBox das Jahr ab und lege darauhin ein neues WorkSheet an. Füge den aktuellen Stand der MA ein. Lege dann einen Zeitstrahl mit dem Tagesdatum und darüber mit der KW an. Da sich dabei doch das eine oder andere ändert, lege ich das Blatt neu an. Dein Hinweis zu Copy/Paste ist OK aber es treten keine Probleme dabei auf. Wenn dann müssten die Daten "extern" eingegeben werden und dann mit Copy/Paste übertragen werden. Das wäre aber definitiv doppelte Arbeit.
    Der Code ist auch nicht das Problem, nur bei der Anlage erscheint der Fehler und dann auch nur wenn der VBE geschlossen ist. Als Workaround habe ich einfach ein paar Jahre (WorkSheets) angelegt. Grund des Codes ist das die Eingabe in den Zellen meisten in Kleinbuchstaben erfolgt aber schöner in Großbuchstaben aussieht. Und ja ich weiß das ist eigentlich kein Grund.

    Beverly:
    Das kann ich leider nicht bestätigen. Bei mir tritt der Fehler auch nach Neustart von Excel auf. *bawling
    Der Code in SheetChange-Ereignis unter DieseArbeitsmappe läuft zwar aber das Einfügen erzeugt das gleiche Problem *bawling

    Luschi:
    Auch Dein Code erzeugt den gleichen Fehler

    Als Hinweis möchte ich noch sagen, dass der Blattschutz aktiviert ist und ein Teil des Fensters fixiert ist. Aber wenn alles deaktiviert wird wird der Fehler auch erzeugt.

    Aber bei der weiteren Arbeit habe ich noch einen Fehler festgestellt. Nachdem ich den Code "manuell" eingefügt habe, stellte ich fest das eine Hinweismeldung von MS wohl falsch ist. Wenn ein ExcelSheet freigegeben wird, können keine Makros bearbeitet werden soweit so gut. Da ich aber die Bearbeitung nur für bestimmte Bereiche freigegeben habe und über Makro z. B. das Wochenende im Zeitstrahl ein und ausblenden will muss ich den Blattschutz aufheben, das funktioniert leider nicht wenn die Datei freigegeben ist. Die Freigabe ist aber sinnvoll, da darüber automatisch jegliche Änderung geloggt werden und das war/ist ein "must have" im Tool.
    Also habe ich folgenden Code im Bereich "SheetChange-Ereignis unter DieseArbeitsmappe" eingefügt:
    Code:
    Und hier ist das größere Problem, das Loggen und das Ändern in Großbuchstaben funktionieren zusammen nicht. Hier wird immer der Fehler "Laufzeitfehler '-2147417848(80010108)': Die Methode 'Range' für das Objekt '_Worksheet' ist fehlgeschlagen". Ich kann mir auch denken warum, da die Änderung des Zellinhaltes über VBA im Hintergrund erfolgt kann das nicht "sauber" protokolliert werden. Sobald ich nur ein "Modul" aktiviere treten keine Probleme auf.

    Ist es nicht möglich beide Code zu "verheiraten"? Ich habe es nicht geschafft.
     
    moses-ms, 16. Oktober 2015
    #5
  6. Hallo TE,

    Code:
    es mag keinen Fehler erzeugen. Das "Problem" ist aber, dass das gewollte, nämlich "Herstellung von Großschreibung" schlicht nicht ausgeführt wird.

    Der Hinweis auf C&P ist nur ein Beispiel, daher der Zusatz auf "z. B.". Aber mach, wie Du denkst.

    Der Hinweis, Ereignisse auszuschalten, wenn Du per Code Wert änderst, ist offenbar ungelesen an Dir vorbeigegangen. Der Hinweis hatte schon einen Sinn.

    Ich erkenne nach wie vor keine Grund, Code zur Laufzeit zu erzeugen. Das erachte ich immer als die schlechteste Variante.

    Code:
    Grüße
    EarlFred
     
    EarlFred, 16. Oktober 2015
    #6
  7. Beverly
    Beverly Erfahrener User
    Hi,

    Weshalb musst du den Code denn überhaupt erst mit VBA schreiben? Wenn er bereits von Beginn an unter DieseArbeitsmappe steht und es nur darum geht neue Tabellen zu erstellen, dann wirkt er doch auch in den neu erstellten Tabellen.


    LFZ 9 grusz.gif
     
    Zuletzt von einem Moderator bearbeitet: 12. Januar 2021
    Beverly, 16. Oktober 2015
    #7
  8. LFZ 9

    Hallo,

    endlich habe ich wieder Zeit mich um mein "Problem" zu kümmern und "JA" warum erst schreiben wenn der Code schon im SheetChange Ereignis stehen kann. DANKE für den Hinweis und lieber EarlFred Deinen Hinweis habe ich wirklich überlesen
     
    moses-ms, 21. Oktober 2015
    #8
  9. Hallo TE,

    wenn der Code aus Beitrag #6, ergänzt um c.Value = ucase(c.value) nicht das tut, was er soll: Nein.

    Grüße
    EarlFred
     
    EarlFred, 21. Oktober 2015
    #9
  10. Moin,

    so in der Art hatte ich es schon versucht, leider ohne Erfolg.

    Danke noch einmal für die Hinweise!
     
    moses-ms, 21. Oktober 2015
    #10
Thema:

LFZ 9

  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