Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1316to1320
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Evaluate und Index-Funktion

Evaluate und Index-Funktion
23.06.2013 20:02:29
cd1001
Hallo,
ICh würde mich über Ihre Hilfe sehr freuen: Warum funtioniert dieser Code nicht:
Dim varArrSub() as Variant
Dim str as String
Dim strEval as String
Dim m_varArr() as Variant 'Public Member der Klasse
strEval="Array(1,2,3)" 'soll später aufgebohrt werden
varArrSub= Evaluate("Index(m_varArr," & strEval & ", 0)")
'Leider gibt es eine Fehlermeldung

Vielen DAnk!

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Evaluate und Index-Funktion
23.06.2013 20:18:00
Sheldon
Hallo Namenloser,
Wozu soll der Code überhaupt dienen? Funktionieren wird er aus mehreren Gründen nicht. Was mir spontan auffällt: Du versuchst, varArrSub zu belegen, hast das Ding aber zuvor als Array definiert. Also kannst Du nun den Array so mit (Einzel-)Daten belegen:
varArrSub(0)=1
varArrSub(1)=1
usw.
Was willst Du denn überhaupt damit erreichen?
Ich lass die Frage mal offen, denn ich bin erstmal weg vom Rechner…
Gruß
Sheldon

AW: Evaluate und Index-Funktion
23.06.2013 20:40:31
cd1001
Hallo,
Worksheetfunction.index gibt ein Variant-Array zurück, also eine Reihe (bzw. Spalte) aus einem Array, hier das varArr().
Es geht darum, dass ich die Index-Funktion indirekt aufrufen möchte, weil sich strEval häufig ändern soll. Also, um es auf den Punkt zu bringen:
1.) Entweder man kann über die Evaluate-Funktion keine Arrays übergeben?
2.) Oder ich mache bei der Syntax irgendwas falsch?
Wer weiß es?

Anzeige
Der Fehler besteht zum Einen in dem, ...
23.06.2013 21:12:33
Luc:-?
…was Sheldon schrieb, CD;
mit den Klammern wird varArrSub() als Array vom Typ Variant definiert, nicht, wie hier erforderlich als Variant (ohne Klammern), der auch ein DatenFeld (Array ) aufnehmen könnte, dessen Zuweisung du mit varArrSub = Evaluate("Index(m_varArr," & strEval & ", 0)") versuchst, was wg weiterer Fehler ohnehin nicht fktionieren kann. Richtiger wäre varArrSub = Evaluate("Index(" & m_varArr & "," & strEval & ",0)"), was aber auch absolut sinnlos ist, weil …
1. m_varArr ein DFeld ist → wie, bitte schön, soll eine Fkt, die einen Text erwartet, mit einem DFeld zurechtkommen?! Dessen Elemente müssten erst mal alle miteinander zu einer Matrixkonstanten in US-Original-Notation verbunden wdn. Das wäre dann ein evaluierbarer Text!
2. strEval ist beinahe noch verrückter belegt, nämlich zwar mit einem Text, aber dieser enthält einen Ausdruck in VBA-Syntax! Die vbFkt Evaluate wertet FmlTexte aus, wie sie im TabBlatt auftreten können (in US-Notation!), nicht VBA-Code! Hier müsste ebenfalls eine Matrixkonstante verwendet wdn, nämlich "{1,2,3}"!
3. Was soll da „aufgebohrt“ wdn? INDEX fkt in einer ZellFml so garantiert nicht, wie du erwartest, und selbstverständlich auch nicht mit VBA!
4. Man kann weder erkennen, ob die Variablendeklaration zu einer Subroutine gehört bzw global im Modul vorgenommen wird, noch, ob überhpt irgendeine Prozedur vorliegt. Die Anmerk Public Member der Klasse scheint auf eine in einem Klassenmodul definierte Variable hinzudeuten…
Fazit: Wie eine VBAgute Arbeit sieht das Ganze nicht aus, eher wie die of an absolute Beginner! :->
Gruß Luc :-?
PS: In FachForen ist idR das Du gebräuchlich!

Anzeige
AW: Der Fehler besteht zum Einen in dem, ...
23.06.2013 21:53:18
cd1001
Und Luc, kommt nur heiße Luft, so wie bei der letzten Antwort, oder gibt es vielleicht sogar einen Lösungsvorschlag?

AW: Evaluate und Index-Funktion
23.06.2013 21:28:54
cd1001
Ok Luc, obwohl mir der Ton nicht ganz passt, vielen Dank für die Antwort. Vielleicht zäume ich das Pferd noch mal anders auf:
Ich möchte aus einem größeren Array (z.B. varArray) einige Zeilen herauslösen, zum Beispiel so:
SliceArray= Worksheetfunction.Index(varArray, (Array(2, 4, 5), 0)).
Das funktioniert einwandfrei. Allerdings möchte ich die Angabe für die auszuwählenden Zeilen nicht "hart" kodieren müssen. Ich möchte vorher ein beliebiges Array mit Argumenten definieren, dass ich dann "generisch" aufrufen kann, zum Beispiel so
varRowsToSelect (0)=2
varRowsToSelect (1)=4
varRowsToSelect (2)=5
Und das ganze soll dann in die Richtung gehen:
SliceArray= Worksheetfunction.Index(varArray, varRowsToSelect , 0)).
Wenn Evaluate und Strings ein Irrweg waren, freue ich mich über alternative Vorschläge. Danke.

Anzeige
Na, wer wird denn gleich verschnupft ...
23.06.2013 21:59:54
Luc:-?
…sein, cd…!
Du bist hier ins Forum geplauzt ohne es zu kennen geschweige denn die FAQ oder die Empfehlungen des Betreibers gelesen zu haben (das erkennt man an der Art deiner Fragestellung) und gibst als Kenntnis-Level VBAgut an. Da musst du dir schon ein entsprechendes Fazit gefallen lassen, zumal ich auch kein höheres angeben würde… ;-]
Du scheinst ja von einer anderen PgmierUmgebung her zu kommen, was man an deinen VarNamen erkennt. Das ist für VBA hilfreich, aber damit ist man nicht automatisch auch VBAgut! Aber, weil das so ist, hilft dir ggf dieser kürzlich geschriebene Beitrag weiter. Evtl kommst du dann auch alleine klar bzw kannst deine Fragen mit mehr VBA-DFeld-Verständnis stellen…
Luc :-?

Anzeige
AW: Na, wer wird denn gleich verschnupft ...
23.06.2013 22:13:23
cd1001
Ok, Dein Verweis auf die Dimensionierung von Arrays ist ja schön und gut, hierfür aber trifft doch nicht das Problem oder? Wenn ich ein varRowsToSelect (0 to 2) dimensioniere habe ich ein 1D-Array und wenn ich es wie oben befülle, fehlt der nächste Schritt: Wie übergebe ich es an die Index-Funktion?

Wofür benötigst du denn die Index-Fkt, ...
24.06.2013 00:15:31
Luc:-?
…cd (der immer noch nicht mit Gruß und Vornamen unterschreibt!);
aus meinem Beitrag ist doch nicht nur die DFeld-Dimensionierung/-Deklarierung ersichtlich, sondern auch, wie man die Elemente eines DFelds indiziert?! Die Verwendung von WorksheetFunction.Index sollte da doch eher die Ausnahme sein, zumal das auch nicht so, wie von dir angedeutet, fktionieren würde.
Ich vermute, du willst ein Array slicen — das gibt's aber in VBA nicht. Wenn du einen Ausschnitt aus einem DFeld erstellen willst, kannst du in bestimmten einfachen Fällen eine Kopie redimensionieren (geht auch aus dem Archiv-Thread hervor). Meist must du aber eine Schleife einsetzen, um den gewünschten Bereich herauszukopieren (zumindest beim „klassischen“ n-dimensionalen VBA-Array ). Den anderen Array-Typ (in einem Variant) kann man ggf schon so aufbauen, dass Abschnitte verwendet wdn können. Das hat aber Grenzen und ist nicht so universal wie bspw in J[ava]Script. Die xlFkt INDEX ist dafür kein Ersatz, denn die hat ihre eigenen Regeln, zu denen im Archiv auch einiges zu finden ist. Hier kommt nämlich das externe xlMatrix-Konzept mit ins Spiel. Also musst du eine Fkt, die beliebige Bereiche eines DFelds ausschneidet, selbst pgmieren. (Das ich so etwas für mich bereits getan habe, kannst du voraussetzen — ggf findet man so etwas auch im Archiv, denn Andere hatten auch dieses Problem.)
Luc :-?
PS: Inwiefern meine Analyse deiner Fehler für dich nur „heiße Luft“ ist, entzieht sich meinem Verständnis… :-[
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige