Office: WENN Makro

Helfe beim Thema WENN Makro in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo EarlFred, ich habe da aus deiner Vorlage heraus etwas gebaut was nahezu perfekt funktioniert. Das hat wahnsinnig viel Spaß gemacht. Vielen Dank... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von falko_d, 25. Oktober 2020.

  1. WENN Makro


    Hallo EarlFred,

    ich habe da aus deiner Vorlage heraus etwas gebaut was nahezu perfekt funktioniert. Das hat wahnsinnig viel Spaß gemacht. Vielen Dank für den Input und die Arbeit, mir die Basis zu legen.

    Den Part mit rngAktuell verstehe ich leider nicht und habe das Makro damit leider nicht zum Laufen bekommen, deshalb habe ich ihn raus genommen:

    Code:
    greift hierauf zu:

    Code:
    Und das funktioniert großartigerweise echt fabelhaft.

    Was mich noch stört und ich leider nicht raus kriege oder verstehe ist, dass ich die beiden Zeilen Selection.Offset -1 und 1 brauche, weil mir sonst meine Ellipse in die nächste Zeile gesetzt wird. Gibt es eine bessere Möglichkeit das raus zu kriegen?

    Zudem fügt es mir bei "" natürlich die Ellipsen bei Monat 0 ein. Sprich auch, wenn ich die Zelle leere. Das habe ich so weg bekommen:

    Code:
    Da gibt es vermutlich auch eine schönere Art und Weise, das zu regeln. Soweit funktioniert es aber.

    Ein Tipp wie ich es schaffe keine Zeilen springen zu müssen wäre echt eine große Hilfe!

    Vielen Dank und schöne Grüße
    Falko
     
  2. Siehst du in meinem Code an irgendeiner Stelle Selection, Activecell oder Rumgehopse in andere Zellen? Vielleicht bemühst du dich um Verständnis meines Codes anstelle ihn zu löschen oder zu verhunzen, indem du immer wieder deinen Code drüberbürstest.

    Selection, Activecell und Gehopse haben (insbesondere) in Ereigniscodes mit Target-Objekt absolut NICHTS zu suchen!

    Und wenn du Fragen zum Code hast: Frage! Ihn zu löschen ist nicht der Weg.
     
  3. Hallo EarlFred,

    mir ist gleich nach dem Posten klar geworden, dass ich eigentlich fragen sollte, ob du mir erklären könntest, wie du es geschafft hast, dass es bei dir nicht so ist mit dem Gehopse.
    Entschuldige. Ich versuche nur etwas zu bauen, womit ich auch umgehen kann, statt vor einer Blackbox zu stehen.

    Du hast mir echt ungemein geholfen bisher. Danke dafür.
     
  4. WENN Makro

    Am 29.10. habe ich dir den ersten Code ohne Gehopse gepostet und einen Monat später hast du ihn immer noch nicht verstanden oder KONKRET nachgefragt? Es fällt schwer, da ernsthaften Lernwillen herauszulesen.

    Welchen Teil meines Codes verstehst du nicht?
     
  5. Hallo Earl,
    ich gebe dir Recht, da ist kein wirklicher Lernwille zu erkennen. Ich habe mich zu schnell dem "versteh ich nicht" hingegeben und es fehlerhaft umgeschrieben.

    Code:
    Die zweite und vierte Zeile verstehe ich nicht. Beziehungsweise die gesamte Arbeitsweise des rngAktuell und rngAnker kann ich nicht durchschauen. Auch, was in der Klammer hinter ellipse_einfügen passiert.

    Ich möchte nicht, dass die Symbole bei erneuter Eingabe gelöscht werden, da ich auch mehrere in einer Zeile haben können möchte. Verstehe ich es richtig, dass rngAnker insbesondere dafür da ist und daher auch in der dritten Zeile überflüssig wird?

    Vielen Dank für die Unterstützung.

    Liebe Grüße
    Falko
     
  6. Code:
    Intersect(Target, rngEingabebereichElli) gibt die SCHNITTMENGE aus den geänderten Zellen (TARGET) und dem zu überwachenden Bereich (rngEingabebereichElli) wieder. Es ist dabei egal, ob TARGET nur eine einzelne Zelle ist oder ein Bereich mehrerer Zellen.

    Beispiel: Du überwachst den Bereich A1:A10 auf Veränderung und kopierst mit einem Rutsch Werte in den Bereich A3:C8. Dann ist die Schnittmenge aus A1:A10 und A3:C8 -> A3:A8. Für alle Zellen im Bereich A3:A8 willst du nun deine Kringel malen lassen. Also muss die Prozedur ellipse_einfügen für jede einzelne Zelle ausgeführt werden. Da machst du mit der Schleife in den Zeilen 2 bis 4:

    Code:
    Übersetze und rede die beiden Codezeilen auf Deutsch:
    "Für jede Zelle (Variable rngAktuell) in der Schnittmenge (...) tu folgendes:
    Male eine Ellipse vom Startpunkt rngAktuell aus"

    Und dann schau dir die Prozedur Sub ellipse_woanders_einfügen(ByRef rngAnker As Range) an: Hier wird ein Übergabewert rngAnker verlangt: Das ist die Zelle, von der aus der Kringel gemalt wird. rngAnker wird in der Prozedur an mehreren Stellen verwendet (daher verbietet sich deine Rückfrage eigentlich!). Schau dir an, was dort passiert und was damit gemacht wird: Alles - nur kein Select, kein Activate, kein Gehopse. Die Prozedur weiß ja, welche Zelle die Basis für ihr Tun ist. Man muss sie also nicht zur Zelle hinführen. Der Übergabeparameter ist also 100% NICHT überflüssig, sondern Kern des Konzepts, um auf S.A.G. zu verzichten.

    Es gibt ein schönes Beispiel mit einem Maler.
    Sagst du dem Maler:
    "Gehe von dem Zimmer, in dem du gerade stehst, in das Zimmer 3 Türen weiter und wenn du dort angekommen bis, dann male das Zimmer, in dem du gerade stehst, gelb an."
    Oder sagst du:
    "Streiche das 4. Zimmer im Flur gelb an."? Letzteres, vermute ich.

    Nein. Es gibt eine 2. Prozedur namens LöscheAlteEllipse. Wenn nicht gelöscht werden soll, darf diese Prozedur nicht ausgeführt werden.
    Dann musst du zusätzlich aber auch folgende Zeile löschen:
    Code:
    Wenn du begreifen willst, was im Code passiert, nutze EINZELSCHRITTE (Taste F8).
    Dafür setzt du einen Haltepunkt (F9) in folgende Zeile:
    If Not Intersect(Target, rngEingabebereichElli) Is Nothing Then

    Sobald du einen Wert einträgst, hält der Code hier an und mit F8 kannst du jeden Programmschritt einzeln nachvollziehen. Schau dir auch an, welchen Wert die Variablen haben! Nutze dafür das Lokal- und Überwachungsfenster des VB-Editors. Wenn du kein Programmierallmächtiger bist, der fehlerfreien Code einfach runterschreibt, ist das Verstehen von Code mit diesen Hilfsmitteln eine absolute Kernkompetenz.
     
  7. Hallo EarlFred,

    deine Erklärung hat mir wirklich ungemein weitergeholfen. Danke.
    Die "Sprechweise" der einzelnen Schritte ist für mich wahnsinnig hilfreich und war mir stellenweise noch zu hoch, bis du es mir erklärt hast.

    Ich habe nun deinen Code benutzt und alles eingefügt, was von mir mit dazu kommt.

    Als "gute Übung" *Smilie habe ich dann noch weiter gegoogelt und bin auf das hier von dir gestoßen:
    https://www.ms-office-forum.net/foru...d.php?t=359161

    Habe mich davon inspirieren lassen und es nach bestem Wissen umgesetzt. Trotzdem würde ich mich über Feedback freuen, evtl siehst du noch Schwachstellen, die ich eingebaut habe?

    Code:
    Das ist wirklich zu 95% dein, deshalb vielen, VIELEN Dank. Es ist wahnsinnig hilfreich und hat mich erstaunlich viel gelehrt.

    Liebe Grüße
    Falko
     
  8. WENN Makro

    Ohne die Verschachtelung im ersten Teil sah es vorher noch so aus:

    Code:
     
  9. Teste deinen Code aus Beitrag 22 mal, indem du Werte aus mehreren Bereichen gleichzeitig änderst (Copy&Paste). Genau für diesen Fall ist er da! Ist das Ergebnis wie gewünscht? Der Code führt zu einem anderen Ergebnis als der „nichtverschachtelte“.
    Oder trifft es das (analog die anderen Fälle):
    Code:
    Ich wäre immer noch bei dem vorgeschlagenen Code aus Beitrag 14 inklusive des Vorschlags zur Vereinheitlichung der „Malprozedur“.
     
    EarlFred, 2. Dezember 2020
    #24
  10. Tolle Sache! Du hast Recht, rngAktuell verbessert die Sache an dieser Stelle *Smilie

    Die Verschachtelung gefällt mir inzwischen auch nicht mehr so gut. Bin wieder zurück auf die aus #14 / #23. Dann ist das auch besser zu verstehen, sollte es jemand anderes einmal nachvollziehen wollen... oder ich selbst nach einiger Zeit! *Smilie

    In die vereinheitlichte Malprozedur denke ich mich noch ein wenig rein. Wie du meintest, eine gute Übung.

    Vielen Dank bis hierher. Auch für deine Geduld.

    Gruß
    Falko

    PS: Spende an Wikipedia ist raus.
     
  11. Das freu mich sehr!

    Habe deinen Code nochmals genauer angeschaut (und nicht nur auf dem Handy): du hast ja doch wieder ein ActiveCell reingeschmuggelt! *boah
    Mach nochmal einen Test, damit du verstehst, warum das falsch ist: Ändere diesmal nicht mehrere Zeilen auf einmal, sondern mehrere Spalten (Beispiel: Überwachter Bereich ist F1:F100, dann ändere C5:G5 mittels Copy&Paste. Du wirst sehen: der "Anker" ist falsch, da er auf Spalte C liegt und nicht Spalte F.
    ActiveCell hat in Ereignisprozeduren (und abhängigen Prozeduren) der Arbeitsblattes !NICHTS! verloren.


    Als Dank für die Spende: Anbei mal ein Konzept, wie man den Code zwar nicht verkürzt, aber besser wartbar macht. Du siehst 2 markierte Bereiche, in denen die Bereiche und Formen definiert werden.
    In den Zeilen
    Code:
    legst du fest, welche Bereiche welches Symbol zeichnen sollen.

    In den Zeilen
    Code:
    Legst du die besonderen Parameter der Symbole fest.

    Der restliche Code ist universell und muss für diese Anpassungen / Erweiterungen nicht beachtet werden. Ggf. kannst du in der Funktion LetDefaultParams noch andere Default-Werte festlegen, was sich dann lohnt, wenn sie für möglichst viele Symbole gleich sind.

    Geh den Code wieder sorgfältig im Einzelschrittmodus (F8). durch. Dann füge in den vorgenannten Blöcken mal einen neuen Block ein (am besten nicht Copy&Paste, sondern SCHREIBEN) und halte dich dabei an die Syntax. Du wirst sehen, dass Intellisense dir eine Menge Arbeit abnimmt, da die verwendeten Typen und Enumerationen dich führen.


    Code:
     
    EarlFred, 3. Dezember 2020
    #26
  12. Ach, vergaß ich zu schreiben: was mir noch nicht gefällt ist
    Code:
    Da ich die Mappe nicht kenne und die Verwendung, habe ich das so belassen. Wenn du den Bezug so behalten willst, setze wenigstens noch Me. davor.
     
    EarlFred, 3. Dezember 2020
    #27
  13. WENN Makro

    Haha, voll erwischt! Der einzige Teil "von mir", glatt rein kopiert und nicht weiter drüber nachgedacht.
    Habs angepasst, danke.

    Die anchor_cell ist quasi die einzige Zelle im Arbeitsblatt, die nicht ständig verändert wird. Somit die einzig passende "verankerbare Konstante", die mir eingefallen ist.
    Mit Me. davor natürlich besser.
    Danke auch hierfür.

    In deinen fabelhaften Code lese ich mich in einer ruhigen Minute mal rein. Da sind viele Funktionen drin die mir neu sind, wieder viel zu lernen!

    Darf ich fragen, wie lang du ca. brauchst um so etwas so sauber niederzuschreiben? Bin ehrlich beeindruckt. Besonders von der Selbstlosigkeit dahinter.

    Schönes Wochenende
    Falko
     
  14. da ich mich durch die vorangegangenen Beiträge in das Thema eingedacht hatte, und der Code ja schon vorgearbeitet war, ging das schneller, als wenn man zum ersten Mal von dem Plan hört. Tatsächlich wollte ich zwischendurch noch einen weiteren Typ einführen und nutzen (Private Type tÜberwachungsbereiche), wovon ich dann allerdings wieder Abstand genommen habe. Der Typblock kann also entfallen, da er nicht genutzt wird. So richtig scharf kann man es also nicht benennen, wie lange es unter "realistischen" Bedingungen gedauert hätte, zumal ich zwischendurch noch anderweitig beschäftigt war.
     
    EarlFred, 4. Dezember 2020
    #29
  15. Hallo EarlFred,

    ich habe mir noch eine kleine Vereinfachung für einen anderen Teil meiner Tabelle überlegt. Falls du Muße dazu hast, würde ich mich über Hilfe freuen.

    Ich würde gerne Symbole variabel einfügen können, je nach dem, was mit in der Zelle steht (wobei das nur eine Idee ist, lösbar sicher auch anders und evtl auch geschickter!).
    Meine Idee war z.B. mit c15 einen "Circle" also meine Ellipse an Stelle 15 zu bekommen. Folgendes habe ich dazu geschrieben, ich bitte um Nachsicht, falls ich bereits grobe Fehler gemacht habe:

    Code:
    Nun ist das Ganze fürchte ich ein großes Durcheinander aus Strings und Ranges (das ich selbst nicht ganz durchschaue), wodurch in der Zeile Call ellipse_einfügen(rngAnker:=rngAktuell) nicht die richtige Art von Wert weitergegeben werden kann. Ich glaube dass ellipse_einfügen eine Range erwartet? Vorher habe ich sie aber durch das Mid$ als String definiert?

    Bin für jeden Tipp dankbar.

    Viele Grüße
    Falko
     
Thema:

WENN Makro

Die Seite wird geladen...
  1. WENN Makro - Similar Threads - Makro

  2. Makro Zip-Datei von Webseite runterladen, auspacken, kopieren

    in Microsoft Excel Hilfe
    Makro Zip-Datei von Webseite runterladen, auspacken, kopieren: Hallo Zusammen, ich habe ein Makro gefunden von dem ich denke, dass es koennen sollte was ich braeuchte, eine Datei herunterladen, auspacken und den Inhalt in die Datei kopieren in der das Makro...
  3. Makro für variable Anzahl von Datensätzen

    in Microsoft Excel Hilfe
    Makro für variable Anzahl von Datensätzen: Hallo zusammen, ich habe wieder einmal ein kleines Excel-Problem, bei dem Ihr mir sicherlich helfen könnt. Ich habe eine Excel-Liste, das ist ein Export aus einem anderen Programm (siehe...
  4. Makro aus personal.xls starten

    in Microsoft Excel Hilfe
    Makro aus personal.xls starten: Auf einem Arbeitsblatt habe ich mehrere Buttons. Die zugehörigen Makros sind in personal.xls gespeichert. Aus dem Code-Editor heraus kann ich die Makros ohne Problem starten. auf dem Arbeitsblatt...
  5. Dokumente und Blatt umbenennen

    in Microsoft Word Hilfe
    Dokumente und Blatt umbenennen: Ich lade mir jeden Tag csv-Dateien von meiner Bank herunter. Diese sind mit Datum versehen, also die Datei selbst und das erste Blatt, z.B. "Konto_13.02.2024". Wenn ich ein Makro erstelle, in dem...
  6. Speichern mit dem Titel der Zelle A2

    in Microsoft Excel Hilfe
    Speichern mit dem Titel der Zelle A2: Moin moin, Ich habe per Makro einen Arbeitsablauf aufgezeichnet der soweit auch funktioniert. Dieser Endet jedoch im "Speichern Unter" Fenster, welches durch das Klicken von "Drucken als PDF"...
  7. Barcode Scanliste Makro anpassen

    in Microsoft Excel Hilfe
    Barcode Scanliste Makro anpassen: Hallo zusammen! Einer der Mitglieder hier hat mir eine Funktionsliste erstellt, mit der man Barcodes scannt und danach einen Wert über die Bildschirmtastatur eingibt. Die Barcodes hatten bisher...
  8. Makro wird nicht angezeigt im Makro Auswahlfenster

    in Microsoft Excel Hilfe
    Makro wird nicht angezeigt im Makro Auswahlfenster: Hallo, wenn ich mein Makro ausführen möchte, öffnet sich das Makro Auswahlfenster. Allerdings wird das Makro nicht aufgelistet. Das Makro befindet sich in der PERSONAL.xlsb Arbeitsmappe. Die...
  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