Microsoft Excel

Herbers Excel/VBA-Archiv

Gültigkeit auslesen | Herbers Excel-Forum


Betrifft: Gültigkeit auslesen von: Thommes
Geschrieben am: 17.02.2012 22:49:18

Hi zusammen,

wurde in einer Zelle die Gültigkeit "direkt" eingegeben, kann ich sie einfach per VBA auslesen (Cells(Zeile, Spalte).Validation.Formula1).
Wurde als Gültigkeit eine Formel eingetragen schaff ich bisher "nur" die Formel auszulesen. Ich benötige aber die aus der Formel resultierenden "Ergebnisse" wie sie der Benutzer in der Drop-Down-Liste angezeigt bekommt.
Hintergrund: Ich möchte per VBA abhängig von der aktuellen Auswahl zum nächsten "gültigen" Wert weiterschalten. Wenn die Werte "diskret" vorgegeben sind, klappt das, wurde die Gültigkeit per Formel definiert schaff ich dies nicht.
Kann mir da jemand auf die Sprünge helfen?

Gruß Thommes

  

Betrifft: AW: Gültigkeit auslesen von: Tino
Geschrieben am: 17.02.2012 23:26:41

Hallo,
evtl. könnte es mit Evalute funktionieren, kommt auf die Formel oder den Namen an,
Kannst Du ein Beispiel hochladen?

Gruß Tino


  

Betrifft: AW: Gültigkeit auslesen von: Thommes
Geschrieben am: 18.02.2012 02:27:07

Ich hab zwei einfache Beispiele, einmal mit "direkt" eingegebener Gültigkeit, wo das Makro prima funktioniert und zwei mit Gültigkeit durch Formel, wo es nicht tut in nen Beispiel gepackt:

https://www.herber.de/bbs/user/78976.xls


  

Betrifft: Das ist das gleiche Problem wie mit den ... von: Luc:-?
Geschrieben am: 18.02.2012 05:38:07

…Fmln der BedingtFormatierung, Thommes,
sie können nur in lokaler Form per VBA ermittelt wdn und das mag Evaluate nicht.
Um das Problem zu lösen, also eine mit Evaluate auswertbare Fml zu erhalten, hast du nur 1 Möglichkeit*. Du kannst die Fml aber auch mit der XLM-Fkt AUSWERTEN in einer benannten Fml auswerten. Das ist etwas umständlicher, fktt aber eben auch mit einer Fml in lokaler Form. Du musst nur dafür sorgen, dass die benannte Fml den FmlText bekommt, zB indem du ihn in eine Zelle schreibst, die du AUSWERTEN als Argument übergibst. In ZellFmln könntest du das Ergebnis dann mit dem Namen der benannten Fml nach = erhalten.
Aber, ob das auch bei einer Datenliste anstelle einer Fml fktt, käme auf einen Versuch an. Wahrscheinlich läge die Liste in der von dir gewählten Form nur als Text vor und müsste erst zu einer Matrixkonstanten gemacht wdn. Bei einfacher Umwandlung in die US-Originalform ginge das dann auch mit Evaluate. Also ein minder komplizierter Fall.
Morrn+schöWE, Luc :-?

*Über die solch sich der „schlaue Tino” mal den eigenen Kopf zerbrechen. Oft genug habe ich ja schon Hinweise gegeben, wie man das macht.


  

Betrifft: AW: Das ist das gleiche Problem wie mit den ... von: Thommes
Geschrieben am: 18.02.2012 10:23:48

Hi Luc,

danke schon mal für die Tipps, aber für mich ist das leider kein minder komplizierter Fall
Im Beispiel war in Zelle D12 =BEREICH.VERSCHIEBEN(G3:G65536;;;ANZAHL2(G3:G65536);) als Gültigkeits-Liste hinterlegt. Mit deinen Hinweisen hab ich dass sogar schon auf englisch übersetzt bekommen =OFFSET(Gültigkeit!G3:G65536,,,COUNTA(Gültigkeit!G3:G65536),)). Wie weise ich dass nun einer Matrix-Konstanten zu um es auswerten zu können?
Die Aufgabenstellung war: Ich will wissen, das wievielte Element der Liste aktuell gewählt ist und dann das nächste in der Liste folgende Element in die Zelle eintragen. Konkret: 6 Elemente können per Drop-Down in der Zelle D12 ausgewählt werden, aktuell ist in dieser Zelle C (= Element 2) eingetragen und das Makro soll nun E (=Element 3) eintragen.
Und das krieg ich leider nicht gebacken :-(

Gruß und nochmal Danke im voraus
Thommes


  

Betrifft: AW: Das ist das gleiche Problem wie mit den ... von: Tino
Geschrieben am: 18.02.2012 10:30:49

Hallo,
ich würde die Formeln nicht in der Gültigkeit anwenden sondern dafür einen Namen nutzen.
Diesen Namen könnte man nun in der Gültigkeit verwenden.
Im VBA kannst Du diesen Namen als Rangebereich verwenden.
Hier ein kleines Beispiel.

https://www.herber.de/bbs/user/78980.xls

Gruß Tino


  

Betrifft: AW: Das ist das gleiche Problem wie mit den ... von: Thommes
Geschrieben am: 18.02.2012 11:29:06

Hi Tino,

super, schon mal herzlichen Dank!!!

Das heißt, das geschilderte Problem, dass ich im Makro wissen will, was in der Drop-Down-Liste auswählbar ist ist tatsächlich doch nicht ganz so einfach?!?

Bei der vorgeschlagenen Lösung bleiben zwei klitzekleine Schönheitsfehler:
* das Makro muss angepasst werden, wenn die Zelle durch hinzufügen/löschen von Zellen einen anderen Bezug erhält (Der ursprüngliche Gedanke war, einfach die unsichtbare Schaltfläche mit dem Standard-Makro über irgendeine Zelle mit Gültigkeits-Liste legen und keine weiteren Anpassungen sind mehr erforderlich)
* warum gibt es jetzt keine Drop-Down-Liste mehr, in der der user sehen kann, welche Werte zulässig sind?

Gruß Thommes


  

Betrifft: AW: Das ist das gleiche Problem wie mit den ... von: Tino
Geschrieben am: 18.02.2012 11:40:36

Hallo,
1. den Bezug der Zellen kannst Du auch durch Namen die sich automatisch anpassen abfangen.
zBsp. gebe der Zelle B12 den Namen "Auswahl1" und im Code verwendest Du
anstatt Range("B12") einfach Range("Auswahl1")

2. ich habe einfach bei der Gültigkeit Zelledropdown deaktiviert.

Gruß Tino


  

Betrifft: AW: Das ist das gleiche Problem wie mit den ... von: Thommes
Geschrieben am: 18.02.2012 12:41:02

Hi Tino,

nochmal herzlichen Dank,
dass mit Punkt2 DropDown deaktiviert ist ganz schön peinlich für mich :-(
Ich hab deine Lösung mit meiner alten Lösung kombiniert, dann tuts Makro auch für "direkt" vorgegebene Gültigkeiten und es liest die hinterlegte Liste selbständig aus. Ich glaub damit ist es exakt wie gewünscht.

Leider funktionierts halt immer noch nicht, wenn es ohne den Umweg mit dem Namen ("Liste1") direkt als Formel in den Gültigkeits-Dialog eingetragen wird, aber das ist mir jetzt egal,
ICH BIN VOLLSTÄNDIG ZUFRIEDEN!!!!

Hier das Ergebnis, dass nicht mehr angepasst werden muss
(Egal ob neue Zellen dazukommen, oder ob eine neue Auswahlliste mit dem Makro "mitbedient" werden soll, einfach Schaltfläche über die Zelle und fertig):

https://www.herber.de/bbs/user/78981.xls


Gruß Thommes


  

Betrifft: Ich hatte mich auf dein Bsp mit Direkteintrag ... von: Luc:-?
Geschrieben am: 18.02.2012 14:55:42

…der Werte als Liste bezogen, Thommes;
hier hast du aber jetzt tatsächlich eine Fml, die natürlich keine Matrixkonstante ist. Da du es ja geschafft hattest, die in Originalsprache darzustellen, hättest du sie auch einfach nur mit Evaluate auswerten können. Das ist dann natürl kein minder schweres Problem mehr, aber den wichtigsten Schritt dabei hattest du ja schon geschafft. Ggf müssen bei Anwendung in einer udFkt, die in ZellFmln des TabBlatts eingesetzt wdn soll, noch relative Adressen korrigiert wdn, da Xl die automatisch an der StandortZelle der Fml ausrichtet.
Aber die Lösung mit benannten Bereichen, was übrigens auch in der Hilfe zur Gültigkeit ausdrückl empfohlen wird, ist natürl einfacher.
Das, was du schon mit der GültigkeitsFml erreicht hast, kannst du übrigens auch auf BedingtFormatFmln anwenden. Probier's mal aus! Da eröffnen sich ganz neue Perspektiven… ;-)
Gruß Luc :-?


  

Betrifft: AW: Ich hatte mich auf dein Bsp mit Direkteintrag ... von: Thommes
Geschrieben am: 18.02.2012 16:58:44

Hi Luc, hi Tino,

also ich hab jetzt noch bissle gesurvt, bissle gebastelt ...

jetzt ist es definitiv so, wie ich es universal einsetzen kann. Das Makro kommt auch damit zurecht, wenn die Auswahlen nicht in Zeilen einer Spalte sondern in Spalten einer Zeile sind, wenn die Werte "direkt" eingetragen sind, ....
Um es auf eine weitere Zelle anzuwenden ist lediglich eine Gültigkeits-Liste zu erstellen und die unsichtbare Schaltfläche "über die Zelle drübergelegt" werden, fertig

Vielen Dank für eure Mithilfe. Hier das Endergebnis (incl. Kommentare):

https://www.herber.de/bbs/user/78983.xls

Vielleicht hilfts jemand mit ähnlichem Problem
Schönes Wochenende und immer die passende Formel
Thommes


  

Betrifft: Danke, dito! owT von: Luc:-?
Geschrieben am: 18.02.2012 17:31:17

:-?


  

Betrifft: Allerdings gibt's da ja immer noch die von ... von: Luc:-?
Geschrieben am: 18.02.2012 17:48:25

…mir erwähnte und besternte 1.Möglichkeit, Thommes,
mit der du die lokale Fml auch ohne Zwischenspeicherung in einer Zelle übersetzen kannst, und die näher erläuterte 2.Möglichkeit mit XLM-Fkt AUSWERTEN direkt für lokale Fmln… ;-)
Luc :-?


  

Betrifft: AW: Allerdings gibt's da ja immer noch die von ... von: Thommes
Geschrieben am: 18.02.2012 21:46:45

Hi Luc,

ich muss zu meiner Schande gestehen, das ich die beste 1. Möglichkeit nicht gecheckt habe.
Ich wär aber mit der geposteten Version auch sehr zufrieden.
Wennn du aber ne noch bessere Möglichkeit kennst, wär ich intersessiert noch was neues zu lernen

Gruß Thommes


  

Betrifft: Du hast auf jeden Fall die einzig annehmbare ... von: Luc:-?
Geschrieben am: 20.02.2012 20:39:57

…3.Möglichkeit verwendet, Thommes,
denn alle weiteren Varianten verursachen Probleme, die bis zum XlAbsturz gehen können, je nachdem, wo und wie sie eingesetzt wdn. Mitunter ist dieser Weg aber nicht so günstig, weil umständlich.
Zur 1.Möglichkeit: Darauf kommst du viell eher, wenn du (auf einem langsameren PC mit älterem Xl) mal den Befehl .Calculate auf einen Range mit Wahrheits- oder Dezimalwerten anwendest. Dann dürfte dir schon was schwanen. Und du weißt ja sicher, dass Evaluate, auch (engl) „kalkuliert”. Ansonsten brauchst du dann nur noch eine kleine udFkt zum Auslesen der Fml* (auch im Archiv)… ;-)
* Relative Adressen müssen korrigiert wdn!
Gruß Luc :-?


  

Betrifft: Der Vollständigkeit halber; ... von: Luc:-?
Geschrieben am: 22.02.2012 21:38:31

…es gibt natürl noch einen 4. gangbaren Weg, aber der ist sehr aufwendig, wenn's 'ne Universallösung wdn soll → alle Fktsnamen ins Original übersetzen quasi per Vokabelliste.
Luc :-?


  

Betrifft: AW: Ich hatte mich auf dein Bsp mit Direkteintrag ... von: Tino
Geschrieben am: 18.02.2012 17:37:35

Hallo,
danke erst mal, dass Du Dein Ergebnis auch anderen zur Verfügung stellst,
ist nicht für jeden selbstverständlich.
Gute Idee die Formel von der Excelzelle übersetzen zu lassen.
Was nicht passieren darf, die Liste darf keine doppelte Einträge enthält.
Aber dies ist in der Regel nicht der Fall, wenn es anständig aufgebaut wird.
Einen Anwendungsfall für mich kann ich jetzt noch nicht sehen!

Gruß Tino


Beiträge aus den Excel-Beispielen zum Thema "Gültigkeit auslesen"