5.9k Aufrufe
Gefragt in Tabellenkalkulation von
Guten Abend,

ich suche nun schon seit vielen Tagen im www aber zufriedenstellende Lösungen habe ich bisher nicht entdecken können.


Was möchte ich?
Ich will in Abhängigkeit von einem Zellwert nebenstehend ein Bild anzeigen lassen.

Warum? (Projektbeschreibung; abstrakt)
Es gibt 100 Dinge, mit zugehörigen Bildern, die in Abhängigkeit von Zeit(Datum) oder anderen Faktoren gefunden werden können
Ob Zeit und/oder Faktor für Ding1; Ding2;...;Ding100 zutreffen, prüfe ich per Tabellen und Formeln an deren Ende ich mir die Position der Grafik im Quellbereich ausgeben lasse
Ich habe einen "Kalender" erstellt mit einem Zeitraum von 14 (anfangs 31) Tage ab einem vom Benutzer festzulegenden Datum
Jeden Tag soll ausgegeben werden, welches Ding gefunden werden kann. Hierfür habe ich 25 Positionen bereitgestellt (anfangs 40), denn es können auch mehrere Dinge an einem Tag gefunden werden.
Neben jeder Position finden sich die berechneten Werte für den Bezug zur Grafik aus dem Quellbereich, in dem sich die 100 Grafiken befinden

Was ist mein Problem?
Ich habe nicht nur 1 oder 3 Bilder, sondern versuchte zunächst 1.371 verknüpfte Grafiken (31 Tage á 40 Positionen + weiteres) einblenden zu lassen, später reduzierte ich die Anzahl auf 464.
In beiden Fällen ist Excel nach dem Einbau der verknüpften Grafiken sehr langsam und sämtliche Aktionen (Eingabe von Daten, kopieren, entf, etc.) dauern mindestens 5sek.
Wenn ich einfach nur so z.B. 1000 Grafiken eingefügt hatte, blieb Excel trotzdem flott. Sind also verknüpfte Grafiken kritisch?


Was habe ich bisher versucht?
Ich erstellte verknüpfte Grafiken (Quellgrafiken sind in Arbeitsmappe enthalten) und habe sie benannt in der Bearbeitungsleiste. Die Namen habe ich zuvor im Namensmanager definiert.
Im 1. Versuch hatte ich für jede anzuzeigende Grafik die Formel =indirekt("'Tabellenname'!" & Zellwert 1 & Zellwert 2) angewandt
Zellwert 1 => per Formel habe ich mir die Buchstaben ausgeben lassen
Zellwert 2 => per Formel ließ ich mir Zahlen ausgeben

Da ich es nicht hinbekommen habe, relative Bezüge im Namensmanager zu erstellen (ist das möglich?) musste ich also für jede anzuzeigende Grafik (also jeden Namen) die Zelle(n) definieren, aus der sie sich die Werte auslesen sollten, um dann per "=indirekt" auf den Quellbezug zuzugreifen und die entsprechende Grafik auszugeben. 1.371 definierte Namen! (oO)
Hat ja auch prima geklappt, nur leider war Excel dann sehr langsam.
Selbiges bei Reduzierung der anzuzeigenden Grafiken auf 464 Stück.

Ich habe die automatische Berechnung auf manuell gestellt. Das brachte leider keine Veränderung der Geschwindigkeit.
Verändert hat sich die Geschwindigkeit, als ich sämtlich definierte Namen im Namensmanager gelöscht hatte. Doch nun funktionierte logischerweise die dynamische Anzeige der Grafiken nicht mehr.

Ich hatte mich etwas umgelesen und stieß auf den Begriff "volatile Funktionen". aHA! Lag also hier der Fehler?
Ich ersetzte zunächst, wenn möglich, jede volatile Formel durch eine andere Möglichkeit und erstellte nochmals 464 definierte Namen mit der Formel: =Index(Quellbereich; Zellwert 1; Zellwert 2)
Ergebnis: Excel war wieder langsam (-.-)


Frage:
Gibt es eine Möglichkeit, für 450 Positionen Grafiken in Abhängigkeit von ihnen nebenstehenden Zellen so anzeigen zu lassen, dass Excel trotzdem "handlungsfähig" bleibt?

Die Art der Formel per Namensmanager scheint es ja nicht zu sein, da zwischen "=indirekt" und "=index" kein Unterschied festzustellen war.
Kann ich eventuell einen Namen so definieren, dass er sich nicht absolut auf eine Zelle bezieht, sondern relativ zu seiner Zellposition?

Ließe sich da was per VBA machen?
Ich muss hierzu gestehen, dass ich davon leider keine Ahnung habe, gern aber bereit bin, mich da ein wenig reinzufuchsen.

Wäre es sonst auch noch eine Möglichkeit, sich die 450 Grafikpositionen nicht aus der Arbeitsmappe auslesen zu lassen, sondern bei den Zellwerten einen Dateipfad "berechnen" zu lassen und dann entsprechend des Pfades die Grafik immer automatisch einzubinden? Es muss sich allerdings aktualisieren, wenn man das Anfangsdatum des Kalender ändert!


Ich hoffe, das bis hier hin der Faden nicht verloren wurde und ihr mir Denkanstöße oder direkte Lösungen geben könnt.
Unter Umständen ist es ja auch gar nicht machbar für Excel! :o)

33 Antworten

0 Punkte
Beantwortet von
Ja, der Aufbau der Berechungen und Dateneingabe ist noch etwas "dahingeklatscht" Da sehe ich auf jeden Fall auch persönlich Optimierungspotenzial.
Mir ging es zunächst auch nur darum, dass irgendwie erst einmal zu realisieren, damit der Benutzer schonmal etas hat, womit er "spielen" kann. Währenddessen wollte ich dann die Projektdatei überarbeiten, so dass sie flüssiger läuft, eventuell noch ein paar meh Daten bieten kann (simpel soll es dennoch bleiben!) oder auch bestehende Strukturen noch übersichtlicher zu halten.

Du sprichst an, dass man eine Variante finden müsste, sich die händische Arbeit zu verkürzen..
Für mich ist das lediglich als "nice to have" einzuordnen. Wichtig ist mir nur, dass der Benutzer ein Produkt in die Hand bekommt, bei dem er nach der 5. Eingabe schon keine Lust mehr hat, überhaupt das Ergebnis zu betrachten.
Wenn es dafür eben 400VBA Einträge braucht.. ja mein Gott^^ aber wenn es natürlich mit deutlich weniger ginge, wäre ich nicht unglücklich drüber ;op

Danke für deine Einordnung bezgl. "SelectCase"
Als ich heute mal deinen beschriebenen FormulaVBACode umgesetzt habe für die Bilder in "Spielerdaten", ist mir dann auch klar geworden, dass hier "selectCase" keine Anwendung findet. Eventuell dann später in den Berechnungtabellen, wo es tatsächlich an einigen Stellen zu Mehrfachprüfungen kommt.

Die Umsetzung des FormulaCodes hat nun aber auch genau das hervorgebracht, was du wahrscheinlich vermieden wissen wolltest.
So sah's bei mir am Ende aus:
https://pics.it-native.de/images/1605221311.png

Ach, und noch etwas, das vielleicht dem Verständnis des ganzen Projektes dient.
Als Grundlage gibt es ein Browsergame. Dort besitzt der Benutzer einen Charakter, den er per Questbelohnungen(Gold/Erfahrung/Items) verbessert.
Innerhalb dieses Spieles gibt es noch weitere Features und aber auch Ranglisten.
Eines dieser Features sind diese Pets, deren Fundbedingungen teilweise an Faktoren (die Dinge aus Tabellenblatt "Spielerdaten" > Spalte F) aus dem Spiel gebunden sind, ohne, dass diese Faktoren aber einen weiteren Einfluss auf die Pets hätten.

Ich hatte das bei dir jetzt so verstanden, zumindest deinen Beiträgen nach, dass du glaubst, diese Dinge/Faktoren haben irgendetwas mit den Pets zu tun (außer, dass sie für manche Pets Fundbedingungen darstellen).

Vielleicht habe ich dich auch einfach nur missverstanden ;o)

Nun denn, verbessern, verkleinern, übersichtlicher strukturieren.. ick bin dabei! :oD
0 Punkte
Beantwortet von
Hallo Strato,

ein paar Fragen hab ich noch:

Kann man die verschiedenen Spielwelten (Habitate) zeitgleich
besuchen, oder muss erst eine Welt abgeschlossen werden um zur
nächsten zu kommen.

Du schreibst von 4 Events. Tatsächlich sind es aber fünf, da in jeder
der 5 Welten ein bestimmtes Pet nur zum entsprechenden Event
auffindbar ist.

für ein Pet gibt es die Bedingung "Char EH Top 1000". Dafür hab ich
in den Spielerdaten kein Eingabefeld gefunden, oder ist das die
Spieler-Rang-Ehrenhalle? Habs jetzt erstmal dorthin verknüpft

Ist dein Kalender vielleicht ungünstig aufgebaut? Wenn er einen
Planer anzeigen soll, welches Tier du an welchem Tag findest,
müsstest du doch eigentlich für jeden Tag 2 Zeilen haben. Oder
kann es nicht sein, dass du am gleichen Tag ein Tages- und ein
Nachtviech suchen willst?
Andrerseits würde,das die Anzahl der enthaltenen Bilder hier wieder
verdoppeln, dabei wollen wir sie ja eigentlich reduzieren. Da lassen
wir uns gemeinsam auch nochwas für einfallen, damit das klappt,
nicht wahr?

Habe jetzt das Ding soweit, dass das Blatt Spielerdaten mit den
Makros erstmal klappt. Wann ein Pet gefunden werden kann, hab
ich hier als Tiptext auf dem Bild hinterlegt. Die Daten werden durch
Öffnen der Datei, Eingabe im Blatt Spielerdaten oder per Klick auf
den Uhr-Button aktualisiert.

Leider dauert bei einem größeren Stufen-Wechsel (also Habitat von
1 auf 20 oder so) der Vorgang immer noch ein paar Sekunden, da
das Ein- bzw. Ausblenden per Makro ein Neuzeichnen veranlasst
und der Code erst weiterläuft, wenn die Neuzeichnung
abgeschlossen ist. Leider hat der Befehl Screenupdating = False
hier keine nennenswerte Beschleunigung gebracht.
Morgen versuche ich nochmal nen anderen Weg. Mal sehen ob der
schneller ist. Im Normalfall wird aber die Stufe ja nur um 1 erhöht.
Das geht relativ flott.

Ach ja, den Link brauchst du ja auch noch:
.xls?dl=0">Projektdatei Meine Version

Gruß Mr. K.
0 Punkte
Beantwortet von
Ich hatte das bei dir jetzt so verstanden, zumindest deinen
Beiträgen nach, dass du glaubst, diese Dinge/Faktoren haben
irgendetwas mit den Pets zu tun (außer, dass sie für manche Pets
Fundbedingungen darstellen).

Vielleicht habe ich dich auch einfach nur missverstanden ;o)

Mir ging es die ganze Zeit um nichts Anderes als die
Fundbedingungen , um dir hier Alternativen anbieten zu können,
musste/muss ich diese halt erstmal verstehen. Allerdings nahm ich
bisher an, dass das Auffinden der Pets, so ziemlich die
Hauptaufgabe des Spiels ist. Gerade mit Bedingungen wie "nur an
diesem Tag" bindet man schließlich die Leute langfristig an das
Game. Hat natürlich auch den Nachteil, dass man dann sein Leben
und seine privaten Termine ständig nur nach dem Spiel ausrichtet.
Wem das nichts ausmacht, OK. Meins wärs nicht so. Obwohl die
Bildchen wirklich nett aussehen und Lust auf mehr machen.

Auf jeden Fall ist das was du hier aufgebaut hast eine wirklich gute
Lösung um die vielen Bedingungen auf Dauer im Überblick zu
behalten. Visuell sehr schön umgesetzt. Nur ist die Aufgabe halt
sehr komplex, und für einen Anfänger technisch schwer bzw. für
einen Außenstehenden nicht ohne Rückfragen umzusetzen, wie
man sieht.

In diesem Sinne erstmal eine gute Nacht. Morgen sehen wir weiter.
0 Punkte
Beantwortet von
Hallo Mr. K,
also die 5 Habitate laufen parallel. Man muss nicht erst das Habitat eines Elements komplett durchlaufen haben, bis man das nächste beginnen kann.

Ich habe es bisher noch nicht beschrieben gehabt, deswegen noch kurz 'ne Erklärung zum Ablauf der Vorgänge des Spielercharakters und wie er letztendlich an die Pets gelangt(ich hoffe es so kurz wie nötig auszuführen):
Der Spieler besitzt einen Charakter.
Das stellt sich wie folgt dar:
[list][*]ein Bild links oben
[*]Statuswerte links unten
[*]5-20 Rucksackslots rechts oben
[*]Screen[/list]Jeden Tag hat er 100 Abenteuerlust (im folgenden "ALU" abgekürzt; 1 ALU = 1min realzeit)
Er kann nun in der Menüleiste links die "Taverne" aufsuchen(anklicken) und findet dort einen Questgeber. Klickt man ihn an, bekommt man immer 3 Quests angeboten. Quests dauern eine bestimmte Zeit. Diese Zeit wird von der verfügbaren ALU abgezogen.
Nun befindet man sich auf Reisen und kann nebenher aber noch andere Menüpunkte besuchen, u.a. "Pets" (oder sites, wie supportnet.de *g*). Am Ende einer Reise(also in diesem Falle nach 5min) findet noch ein Kampf mit einem Questgegener statt, der erfolgreich abgeschlossen sein muss, damit man die Questbelohungen erhält. Dazu muss nichts getan werden. Das System "würfelt" diesen Kampf aus..
Wurde zu Beginn bei der Questauswahl ein Item als Belohnung ausgesprochen, so wird dies im letzten Screen im unteren, mittleren Fenster angezeigt und man findet dieses nun in einem seiner Rucksackslots.

Warum erkläre ich dir das? Nun, bezüglich der Pets ist es nun so, dass, wenn man ein Pet im Habitat freigeschaltet hat (man klickt ein Habitat an, es findet ein Kampf statt ähnlich wie beim Screen "diesen Kampf"), die Fundbedingungen zutreffen und man bei der Questauswahl jene Quest genommen hat, deren Questort (weiß angezeigt in der Questbeschreibung, siehe "3 Quests angeboten") auch der Ort ist, an dem eben jenes Pet gefunden werden kann, dann bekommt man am Ende der Quests ein Pet-Ei (Item).
Nun geht man nur noch in den Menüpunkt "Pets" und "brütet" dieses Pet aus. Nun besitzt man es.

Die Habitate dienen also lediglich der Freischaltung von Pets, die sich dann in Quests des Spielers finden lassen.
Nur wenige und spezielle Pets erhält der Spieler direkt, ohne eine Quests dafür gemacht zu haben (z.B. Habitatbosse auf Ebene 20). In solchen Fällen wird man direkt ein Pet-Ei in seinem Rucksack finden und verfährt wie mit den anderen Pet-Eiern.

Das jetzt nur mal so als Erklärung, wie das Ganze abläuft..
Was mit Pets sonst noch möglich ist und welche Auswirkungen sie auf den Charakter haben, ist für das Projekt nicht relevant..


Deine weiteren Fragen:
Events
Es gibt 4 Events, die in einem Rhythmus, immer wiederkehren. Sie finden immer am Sa&So statt. Leider ist dieser Rhythmus nicht statisch, sondern kann zwischendrin auch mal wechseln. Deswegen muss die Eingabe vom Nutzer erfolgen und kann nicht von mir automatisch berechnet werden lassen.

Es ist für jemanden, der da nicht drin steckt natürlich missverständlich, wenn er neben den 4 Events noch den Begriff "Geburtstags-event" findet.
Das Geburtstagsevent hingegen kann ich automatisch berechnen lassen und findet in jedem Falle an dem nachfolgenden Wochenende des 22. Juni statt. Liegt der 22. Juni auf einem Wochenende, so ist dieses das Wochenende mit dem Status "Geburtstagsevent"

Deshalb ist es nicht bei der Auswahl der Eventart vorhanden, zumal es lediglich auf 2 berechenbare Tage im Jahr zutrifft. Die 4 anderen Eventarten gibt es ja regelmäßig.

Char EH Top 100
Damit die Anzeigefelder der Fundbedingungen nicht so breit gezogen werden müssen, versuchte ich die Begriffe so weit als verständlich abzukürzen. Für jemanden, der in diesem Spiel zuhause ist, ist dieser Begriff glasklar als "Rang des Spielers in der Ehrenhalle muss unter 101 liegen" zu identifizieren.
Aber selbst für jemand externes wie dich war es möglich, diesen Begriff korrekt zuzuordnen :oD
also ja, dieser Begriff bezieht sich auf die Spielerehrenhalle.

Kalenderstruktur
Da habe ich dich nun leider nicht ganz verstanden. Weshalb sollte es für jeden Tag 2 Zeilen benötigen?
Ich prüfe für ein Pet, ob es an Datum x in einer Quest zu finden ist (sind Fundbedingungen erfüllt? Dies geschieht in den Berechnungstabellen im Blatt "Pets & Weiteres")
theoretisches Beispiel:
[list]Ist Pet X an Datum Y zu finden?[list][*]Wenn ja, gebe Wert 100 aus[*]sonst Wert 1000[/list]
Ist HEUTE Datum Y & ist voriger Wert 100?[list][*]Wenn ja, gebe Wert 10 aus[*]sonst Wert 100[/list]
Ist voriger Wert 110 & die Fundbedingung Tag/Nacht?
[list][*]Wenn ja, dann prüfe, ob JETZT = Fundbedingung [Tag o. Nacht]
[list][*]wenn ja, Wert 5
[*]sonst Wert 10[/list][*]sonst Wert 5[/list][/list]
Nach Addierung der Summen ergibt sich für Pet X:
[list]Wert 115 = bunt anzeigen
Wert >115 & Wert < 1.015 = grau anzeigen
Wert >1.014 = nicht anzeigen und prüfe ob Datum Y = HEUTE?
[list][*]Wenn ja, prüfe: Ist jetzt Tag?
[list][*]Wenn ja, dann Wert 1 (gelbes Bild anzeigen)
[*]sonst Wert 2 (blaues Bild anzeigen)[/list][*]sonst Wert 3 (graues Bild anzeigen)[/list][/list]

.. und nun kommt der Kalender und pickt sich die Daten raus^^
Die ganzen Werte stehen dann letztendlich für eine Bezugsformel, die sich daraus zusammensetzt und aus einer Imagetabelle das entsprechende Bild für die Situation wiedergibt. [list]Soll Position (1 bis 25) überhaupt ein Pet wiedergeben[list]wenn nein, welches farbige Bild soll es dann sein für dieses Datum?
Wenn ja, ist das Pet aktiv jetzt zu finden(bunt) oder nicht(grau)?[/list][/list]

lange Rede, kurzer Sinn.. Der Kalender soll für ein Datum nicht nur möglich findbare Pets anzeigen, sondern auch, ob sie JETZT zu finden sind. Deshalb sind im Kalender diese Pets bunt. Sie stechen ins Auge. Der Benutzer weiß nun:
"aaahA, dieses Pet kann ich JETZT finden.
Ein anderes kann ich auch heute finden aber dazu muss folgendes zutreffen..*liest Fundbedingungen unterhalb des grauen Bildchens aus*"


.. und weshalb bräuchte es, deinem Gedankengang nach, zwei Zeilen je Tag?


Ich werde mir auf jeden Fall jetzt mal deine Version ansehen und gucken, was da für feine Codes drin sind.
Das mit der Uhr bzw. wie die Aktualisierung gestartet wird, finde ich schon ziemlich prima :o)
0 Punkte
Beantwortet von
.. und weshalb bräuchte es, deinem Gedankengang nach,
zwei Zeilen je Tag?

Mich hatte das Tag/Nacht-Symbol in der erstel Spalte des Kalenders
verwirrt. Wenn du Alle Pets anzeigst, die man an diesem Tag finden
kann, egal ob bei Tag oder bei Nacht, und die Bedingungen darunter
schreibst ist das auch OK. Dann wird dieses Symbol aber eigentlich
nicht benötigt. Oder soll es nur für den aktuellen Tag visualisieren,
dass JETZT Tag oder Nacht ist?

Kalenderstruktur:
...und genau diese Zahlen verstehe ich leider nicht. (Wenn 100 dann
10 sonst 100, gibt in keinem Fall 110 aus.)
Muss ich aber auch nicht verstehen, da es sich, wie du selbst
schreibst, nur um Hilfszahlen handelt, die in deiner Version für den
Aufbau der Bezüge benötigt werden. Wie du siehst, hab ich das
ganze etwas anders gelöst. Um den Kalender in meinem Schema
deinem Wunsch enstprechend darzustellen, fällt mir bestimmt auch
noch was ein. Eine Idee hab ich schon, brauch dafür aber noch
etwas Zeit.

Events:
OK dann gibt es also keinen echten Rhytmus, sondern der Zufall
entscheidet, welches Event am nächsten Wochenende stattfindet.
Muss der Nutzer eben eine Eingabe mehr machen, darf sich dann
aber nicht beschweren, wenn er aufgrund nicht aktuell gehaltener
Daten ein Event verpasst hat.
Wie ist das genau mit den Events, die zusätzlich an Sondertagen
stattfinden? Wenn du in den entsprechenden Feldern im Kalender
Daten einträgst, welche Events sind dann dahintergelegt? Oder
beziehen sich die Daten allesamt auf die Eingabe im Feld nächstes
Event? Wenn ja, kann es dann passieren, dass man Sondertage
mit anderen Events verpasst?
Werde den Teil nochmal umbauen.

Ich weiß nicht was genau passiert ist. Aber heute funktioniert die
Datei bei mir makellos. Ohne irgendeine Änderung gemacht zu
haben, werden die Bildchen jetzt auch bei Stufenwechsel von 1 auf
20 ohne größere Wartezeiten aktualisiert. Fein, eine Baustelle
weniger, um die ich mich kümmern muss. Wie klappt das bei dir?

Falls du irgendwelche Fragen zu meiner Vorgehensweise oder
bestimmten Codeschnipseln hast, kannst du gern fragen. Wobei ich
allerdings denke, dass die hier verwendeten Codezeilen
selbsterklärend sind. Vielleicht zur Info: VLookup ist die englische
Bezeichnung für SVERWEIS.
0 Punkte
Beantwortet von
Ja, Mond/Sonne soll einfach nur nett veranschaulichen, welcher Tagesstatus jetzt grade für das aktuelle Datum gilt.

ja, habe schon fleißig in deinen Codes rumgelesen und es ist auf jeden Fall eine großartige Hilfe, da ich weiß, was mit dem Code realisiert wird.
Ich versuche auf jeden Fall, das Ganze für meine Projektdatei einzubauen. Sei mir da net bös aber ich werde nicht einfach stumpf deine Datei - deine Arbeit - benutzen, sie anderen zur Verfügung stellen und dann sagen: "Guckt ma, dolles Ding, nech?"
Das is so'n persönliches Ding, dass ich es auf jeden Fall auch selbst geschafft habe, das umzusetzen. Wenn es denn dann am Ende bei meinen Codes genauso aussieht, wie bei deinen, okay, dann ist dat eben so. Wär ja nun auch wirklich nicht schlimm, wenn bei mir das gleiche rauskommt, wie beim Fachmann^^

Diese ganze Sache mit den Hilfszeilen/-werten war bei mir ja nur deshalb von Nöten, weil ich es per Excelformeln aus Zellen zusammenrechnen ließ.
Wenn ich natürlich per VBA ähnliche Formeln verwende, diese aber nicht für jede Zelle extra anpassen muss, sondern nur noch festlege, tu dies, tu das.. ist das natürlich deutlich eleganter und wie du auch schon geschrieben hast, wesentlich benutzerfreundlicher, da flotter..


Zu den Events:
Es ist bei dem Spiel schon vorgekommen, dass die 4 Events zusammengelegt wurden und nicht nur auf Sa/So beschränkt war.
Bevor ich die Info, ob an solchen Events auch die Fundbedingungen für diese "Event-Pets" verifizierte, hatte ich diese Felder schon mal mit eingebaut, weil ich davon ausging, dass ein Pet mit der Bedingung "GoldEvent" auch zu einem Event gefunden werden kann, an dem alle 4 Arten gleichzeitig aktiviert sind.
Dem ist nicht so..

Von daher müsste ich diese Felder eigentlich wieder rausnehmen. Ich habe sie aber noch drin gelassen, weil bisher der Benutzer über das Einstellen der Eventart ja nur das dem aktuellen Datum nachfolgenden WE damit belegt.
Der Kalender zeigt mit 14 Tagen aber auf jeden Fall immer mindestens 2 Wochenenden an und es ist auch nicht gesagt, dass eines davon das dem aktuellen Datum nachfolgende WE ist, weil der Benutzer ja ein völlig anderes Startdatum festgelegt haben kann (was für ein kruder Satz (oO) ).

Mit diesen "Sonderdaten" konnte der Benutzer 5 Tage bestimmen, an denen die von ihm eingestellte Eventart gilt. Er könnte also prüfen lassen, ob er am 3. Juniwochenende, sofern denn dann auch seine eingestellte Eventart im Spiel vorherrscht, das spezielle Pet mit der entsprechenden Fundbedingung finden kann, wenn er diese zwei Daten in den Sonderdaten eingetragen hat.
Aus welchen Gründen auch immer das mal nötig sein sollte aber ich wollte Eventualitäten des Nutzers in diesem Projekt ermöglichen :o)


Bei mir ging das mit größeren Habitatsstufensprüngen problemlos..


Achso.. Zeit..
also ich werde die nächste Woche sowieso etwas kürzer treten müssen bezgl. dieses Projektes, da am Freitag meine theoretische Abschlussprüfung zum Zimmerer stattfindet. 'n bisl pauken muss ich bei aller Trivialität der Thematik dann doch schon ;o)
0 Punkte
Beantwortet von
Natürlich bin ich dir nicht böse, wenn du meine Version nicht 1:1
weiterreichst. Im Gegenteil, ich wäre etwas enttäuscht, wenn du das
tätest. Ziel der Aktion soll vielmehr sein, dir aufzuzeigen, wie man
sowas noch aufbauen kann und dir Ideen geben, wie du ggf. auch
künftige Projekte besser umsetzen kannst. Die Möglichkeiten von
Excel und insbesondere VBA sind (fast) grenzenlos. Man muss sie
nur kennen. Dazu ist es wichtig, dass du dich damit beschäftigst,
was du ja auch löblicherweise tust. Das unterscheidet dich von
Vielen hier, die oft fertige Komplettlösungen erwarten, was aber
nicht der Sinn dieses Forums ist.
Wie ich also bereits schrieb: Wieviel du davon tatsächlich
übernimmst ist deine Sache. Zumindest hast du aber nun eine
Vergleichsmöglichkeit, die dir hilft, zu prüfen, ob deine
Verknüpfungen richtig sind.
Und letztlich hast ja schließlich du die eigentliche Hauptarbeit
gemacht, indem du mühsam herausgefunden hast, welche
Bedingungen für welches Pet nötig sind.

weil ich davon ausging, dass ein Pet mit der Bedingung
"GoldEvent" auch zu einem Event gefunden werden kann, an dem
alle 4 Arten gleichzeitig aktiviert sind.
Dem ist nicht so..
Ach! Da würde ich mich aber beim Anbieter beschweren.
Das ist ja sonst verwirrend für den Nutzer.

Lernen für die Prüfung ist definitiv am Wichtigsten. Dann lass
das Projekt lieber noch paar Tage liegen. Der 22. Juni ist ja noch ein
bisschen hin, sodass Keiner das Geburtagsevent verpassen wird.
Auch ich kann dem Thema in den nächsten Tagen nur wenig Zeit
pro Abend opfern, da ich momentan sehr lange Arbeitszeiten habe
und morgens früh raus muss. Aber das mit dem Kalender will ich
schon noch irgendwie einbauen. Einfach nur aus Spaß an der
Freude, wenn du verstehst, was ich meine :-)

Hier erstmal (noch ohne Kalender) die nur minimale Anpassung der
Events:
K.xls?dl=0">Projektdatei Meine Version

Für deine Prüfung drück ich dir natürlich die Daumen - Ehrensache
0 Punkte
Beantwortet von
Sou, die Woche is rum, die Prüfung geschrieben (halbwegs anständig gutes Gefühl. in 4 Wochen weiß ich mehr)..

Was hab ich zwischenzeitlich mal gemacht?
Also, ich habve mir mal deine Datei zu Gemüte geführt und.. heiliger Bimbam (oO)
VBA ist bei weitem nicht "mal eben" so kapiert, wie ich mir das gedacht hatte. Natürlich, baut alles schön logisch auf und erklärt sich mir durchaus aber wenn ich es dann für mich selbst auf mein eigenes Beispiel übertragen will, ohne es stumpf zu kopieren, dann ist bei mir das Ende der Fahnenstange schon erreicht.

Deine mir vorgeschlagene Lösung gefällt mir schon ganz gut. Nur ist es so, dass jedes Mal, wenn Daten eingegeben werden, die kompletten Bilder für einen winzigen Augenblick verschwinden (aktualisiert?) und dann wieder korrekt angezeigt werden. Sie blinken halt einmal ganz kurz weg und wieder auf. Nicht wirklich lang, aber lang genug, um es zu bemerken.
Ich will nicht nörgeln aber.. das will ich weg haben^^ (und ich will nicht, dass mir das jemand macht, sondern, dass ich es selbst hinbekomme)

Fernerhin hat du in deinem Code bereits sämtliche Berechnungen enthalten, die vorher Excel per Formeln in den Tabellenblättern berechnet hat. Das ist mir noch 'n Schritt zu weit. Ich würde gerne die Berechnung von Bedingungen noch "VBA-extern" halten. Wenn ich mich mit den VBA.Basics in sicheren Gewässern befinde, was einfache Anzeigen, Werteänderungen, Schleifen etc. betrifft, bin ich gern bereit, die ganze Berechnungsarbeit auch VBA zu überlassen und nur noch Daten zu "liefern".

Bei mir (in meiner eigenen Datei, wo ich eigenständig versuche, Codes für die Bilderermittlung einzusetzen) tritt inzwischen immer wieder ein Fehler auf, bei dem ich das Makro beenden muss, welches mir die Pet-Bilder im Tabellenblatt Spielerdaten aktualisiert.
Der auf jeden Fall noch nicht sinnvolle Code sah bei mir zunächst wie folgt aus:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("P7:P167")) Is Nothing Then
ActiveSheet.Pictures("Wasser01").Formula = Range("Y7").Value
ActiveSheet.Pictures("Wasser02").Formula = Range("Y8").Value
ActiveSheet.Pictures("Wasser03").Formula = Range("Y9").Value
ActiveSheet.Pictures("Wasser04").Formula = Range("Y10").Value
ActiveSheet.Pictures("Wasser05").Formula = Range("Y11").Value
[... usw. bis..]
ActiveSheet.Pictures("Schatten19").Formula = Range("Y166").Value
ActiveSheet.Pictures("Schatten20").Formula = Range("Y167").Value
End If
End Sub

Zunächst einmal, von aller Unsinnigkeit des Codes abgesehen, funktionierte er prima.. solange ich mich auch im Tabellenblatt Spielerdaten befand.
Jedes Mal, wenn ich aber in einem anderen Tabellenblatt auf den Bereich P7:P167 klickte, erschien bei mir eine Fehlermeldung, bei der ich nur noch "beenden" oder "debuggen" anwählen konnte.

Ich dachte mir, klar, liegt daran, dass mit "ActiveSheet" eben immer das aktuelle Tabellenblatt angesprochen wird.
Wie nun also grenze ich dieses Makro lediglich auf Spielerdaten ein?
Ich hatte versucht es darüber zu realisieren, dass ich ActiveSheet stumpf durch Worksheets("SPIELERDATEN") ersetzte.
Der Fehler tritt jedoch immer noch auf, wenn ich auf einem anderen Tabellenblatt den Bereich P7:P167 anklicke..

Frage:
Wie grenze ich in einem VBA-Code die Abfrage auf ein bestimmtes Tabellenblatt ein, so dass er nicht versucht, den Code auch auf anderen Tabellenblättern auszuführen?


##############################
In deiner Datei habe ich mich ein bisschen in den Codes umgesehen, um zu verstehen, wie sie funktionieren.
Ich könnte zwar bestimmte Abschnitte erklären aber leider nicht den Code von Anfang (oben) bis Ende (unten).
Doch eins nach dem anderen..

Den Code Bildnamen habe ich größtenteils verstanden. Nicht zuletzt auch wegen der einleuchtenden Erklärungen, die du mit eingefügt hast :o) Mir ist bekannt, wie und dass ich innerhalb des Codes Erläuterungen hinzufügen kann, ohne den Code zu beeinträchtigen.
Eine Schleife, die jeder Grafik (egal wie sie heißt), den Grafiknamen gibt, der in der Zelle über dem Bild angegeben ist.
Meine Fragen hierzu:
[list][*]"For Each p In ActiveSheet.Pictures".. wofür steht das p? Ist das willkürlich gewählt? Hättest du auch jeden anderen Buchstaben einsetzen können?
[*]Wird das nur im Tabellenblatt Images ausgeführt oder überall?
[*]Hast du es einfach nur einmal ausführen lassen und dann das Makro wieder beendet, da die Grafiken ja nun benannt waren?[/list]
Den Code aus dem Modul verstehe ich nur partiell.
Ich weiß nicht, ob es sich eventuell hierfür anböte, das nicht in mühsamer Textarbeit hier zu erörtern, sondern über Skype, TS, Telefon, whatever.
Sofern du das für dich überhaupt in Betracht ziehst! Wenn du deine Freizeit nicht für E-Learning (in deinem Falle ja E-Teaching^^) aufgeben möchtest, habe ich dafür vollstes Verständnis und kann halt eben nur darauf hoffen, dass du es mir hier per Schriftform teilweise erklären kannst.
0 Punkte
Beantwortet von
Hi Strato,

das mit der Prüfung klingt erstmal gut. Weiter so.

Dass die Bilder bei mir während der Aktualisierung kurzzeitig verschwinden liegt schlicht an den beiden Screenupdating-Zeilen. Wenn du die rauslöschst dürfte das nicht mehr passieren. Die dadurch enstehende minimal längere Laufzeit dürfte mittlerweile nicht mehr auffallen.

VBA ist ein wirklich guter Weg um komplexe Berechnungen in den Hintergrund zu verlagern. Nicht selten stößt Excel mit seinen Formeln an die Grenzen des Machbaren. VBA hilft hier weiter. Du solltest auf jeden Fall in diese Richtung weiter denken. Mach dich aber nicht allzu verrückt damit. Das kommt erst nach und nach. Learning by Doing nennt man das. Bis dahin zählt erstmal nur das Ergebnis, egal wie du dahin kommst.

Dass du ActiveSheet mit Worksheets("SPIELERDATEN") ersetzt hast, war durchaus richtig. Allerdings sehe ich den Grund für deinen Bug nicht an dieser Stelle. Du löst den Code über das SelectionChange Ereignis aus (also bei Markierung eines neuen Bereichs im Aktiven Blatt) Liegt denn dein Code auch (und nur!) im entsprechenden Modul, welches Tabelle1 (Spielerdaten) heißt?
Du kannst natürlich auch prüfen ob sich Target wirklich im gewünschten Blatt befindet mit If Target.Parent.Name = "Spielerdaten" aber so wie du das beschreibst, liegt die Ursache für den Bug wohl an anderer Stelle deines Codes.
Du kannst höchstens noch vor Worksheets ein ThisWorkbook setzen, (ebenfalls durch Punkt getrennt) um Probleme mit anderen Dateien auszuschließen.

Genau, das p ist willkürlich. Die Stärke von VBA ist, dass du Zwischenergebnisse in Variablen speichern kannst, welche du frei benennen kannst. Statt p könntest du die Variable z.B. auch MeinBild nennen.

Welcher Code in welchem Blatt ausgeführt wird, kommt immer darauf an, auf welche Weise du das Makro startest. Die Möglichkeiten sind so vielfältig, dass meine Antwort hier zu lang werden würde. Grundsätzlich gilt aber, dass ein Code, der in einem bestimmten Blattmodul meist auch nur von diesem Blatt angesprochen werden kann. Genereller Code der in der ganzen Arbeitsmappe ausgeführt werden soll gehört in ein Standardmodul wie z.b. Modul1. Wenn du darüber hinaus Code nutzen willst, der in jeder beliebigen Arbeitsmappe ausgeführt werden kann, (z.B. der Befehl "markiere die aktive Zelle gelb") solltest du diesen in ein Standardmodul der Datei "Personal.xlsx" legen. Diese wird angelegt, wenn du über Ansicht -> Makro -> Aufzeichnen wählst und dort die Option Persönliche Arbeitsmappe aktivierst.

Und ja. das genannte Makro war auch nur ein einmalig ausgeführtes Hilfsmakro zum Benennen der Bilder. Hab ich mit F5 ausgeführt, als ich mich auf dem Blatt Images befand und dann nochmal auf dem Blatt Spielerdaten.

TS wäre für mich noch OK, die anderen Sachen geb ich nicht raus.
Wenn du den folgenden Code in einem beliebigen Modul meiner Version ausführst, erhältst du die Zugangsdaten. Da wäre ich dann morgen so ab 17:00 oder zu einem späteren Zeitpunkt deiner Wahl anzutreffen. Mal sehen ob das klappt.

Hier der Code: Einfach einfügen, reinklicken und F5 drücken.
Sub asda()

x = 5

For y = 1 To 20
x = x + y
Next y
x = y / 7
y = y * 7: x = y / 7 ^ 2


Set c = Worksheets(x).Columns(Int(Sqr(x ^ 2 + 1)) + 1).Find("Fangzahngebirge")
For i = 1 To Sheets.Count - 1
Set c = Worksheets(x).Columns(Int(Sqr(x ^ 2 + 1)) + 1).FindNext(c)
Next i
a = c.Row
z = Chr(Asc(Mid(Sqr(x ^ 2 + 1) - x, 2, 1)) + 2)
Stop
MsgBox a & z & a * 2 + x & z & a / x - (Sqr(y / x) - x) & z & a + x ^ 2 + (Sqr(y _
/ x) - x) & ":" & Sqr(y / x) * x - 1 & Int(a / 2) & Chr(13) _
& Generieren(a - 13, a + 4, y - x * 10 - 2, y - x * 10 - 2 _
, y - x * 10 + 2, y - x * 12, y - x * 11, y - x * 11 + 2, y - a + 4, 32, a - 10 _
, y - x * 12 + 1, a + x * 4, a + x ^ 2 - 1, a + x * 5, a + Sqr(y / x) + 4, _
Val(String(3, "1")), a + x ^ 2 - 1, a + x * 5, a + x ^ 2 + x * 2, a + x ^ 2 - 1 _
)

End Sub

Function Generieren(ParamArray w())

'y = Sheets(1).Cells(106, 20)
For i = 0 To UBound(w)
Generieren = Generieren & Chr(w(i))
Next i

End Function
0 Punkte
Beantwortet von
Mist 2 Zeichen zu breit. Hier nochmal

Sub asda()

x = 5

For y = 1 To 20
x = x + y
Next y
x = y / 7
y = y * 7: x = y / 7 ^ 2


Set c = Worksheets(x).Columns(Int(Sqr(x ^ 2 + 1)) + 1).Find("Fangzahngebirge")
For i = 1 To Sheets.Count - 1
Set c = Worksheets(x).Columns(Int(Sqr(x ^ 2 + 1)) + 1).FindNext(c)
Next i
a = c.Row
z = Chr(Asc(Mid(Sqr(x ^ 2 + 1) - x, 2, 1)) + 2)
Stop
MsgBox a & z & a * 2 + x & z & a / x - (Sqr(y / x) - x) & z & a + x ^ 2 + (Sqr(y _
/ x) - x) & ":" & Sqr(y / x) * x - 1 & Int(a / 2) & Chr(13) _
& Generieren(a - 13, a + 4, y - x * 10 - 2, y - x * 10 - 2 _
, y - x * 10 + 2, y - x * 12, y - x * 11, y - x * 11 + 2, y - a + 4, 32, a - 10 _
, y - x * 12 + 1, a + x * 4, a + x ^ 2 - 1, a + x * 5, a + Sqr(y / x) + 4, _
Val(String(3, "1")), a + x ^ 2 - 1, a + x * 5, a + x ^ 2 + x * 2, a + x ^ 2 - 1 _
)

End Sub

Function Generieren(ParamArray w())

'y = Sheets(1).Cells(106, 20)
For i = 0 To UBound(w)
Generieren = Generieren & Chr(w(i))
Next i

End Function
...