Eval-Funktion für VBA?

Hi Leute,

also ich weiß, dass es in JavaScript eine Funktion gibt, die sich eval nennt und mit der man Variablen aus Strings zusammenstellen und Werte zuweisen kann. Diese Funktion brauche ich in VBA, habe aber nichts zu gefunden und eval in VBA scheint für mich nicht den gleichen Sinn zu haben.
Hoffe, ihr könnt mir helfen =)
LG

Hallo,

die Eval-Funktion ist IMO Bestandteil von Access und sollte in VBA zur verfügung stehen. Was Du damit vor hast, habe ich nicht ganz verstanden, ich weiß aber wozu Eval da ist.

Wenn Du einen String mit einem Mathematischen ausdruck hast, Beispiel:

3^2+(5*4)+6

kannst Du den an Eval übergben und ausrechnen lassen, Du bekommst 35 zurück.

Gruß, Rainer

hi =)

genau das ist es nicht, das ist ja das problem ^^
ich will es ungefähr so haben.

================
dim test
test = „keks“
eval(test) = eval(test) + 1

ich hole mir nämlich in die variable „test“ werte aus einer datenbank und dann möchte ich, dass aus dem wert eine variable wird und der beinhaltende wert hochgezälht wird.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

genau das ist es nicht, das ist ja das problem ^^

dann ist eval nicht das, was Du suchst. :smile:

ich will es ungefähr so haben.

================
dim test
test = „keks“
eval(test) = eval(test) + 1

ich hole mir nämlich in die variable „test“ werte aus einer
datenbank und dann möchte ich, dass aus dem wert eine variable
wird und der beinhaltende wert hochgezälht wird.

das habe ich noch nicht verstanden.

Mach mal ein Beispiel:

Etwa so:

Vorher:

‚Test1‘

Nachher:

‚Test2‘

Oder …

Vorher:

‚Test‘

Nachher:

‚Test1‘

IMO brauchst Du aber nur eine simple Stringzerlegung. :smile:

Gruß, Rainer

Hallo,

ich hoffe mal, daß ich erraten habe, was du möchtest. Das würde dann so aussehen:

dim test
test = "keks"
test = cnt(test,1) 

Private Function Cnt(ByVal St As String, ByVal Za As Long)
 Dim Po As Integer
 Po = 1
 While (IsNumeric(Mid(St, Po, 1)) = False) And (Po 
Gruß, Rainer

also…
ich hole mir einen wert aus einer tabelle. da steht beispielsweise 3x „apfel“ und 2x „banane“ drin. dann soll es 2 variablen geben, die apfel und banane haben. da ich aber mehr fälle als nur 2 habe, habe ich keine lust darauf, eine ewig lange if-abfrage zu machen, nachm motto

============================
if(wert = „apfel“) then
apfel = apfel + 1
elseif(wert = „banane“) then
banane = banane + 1
endif

genau das will ich NICHT ^^ ich will stattdessen eine „variable aus dem wert heraus erstellen“. halt genau so wie in javascript :wink:

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

nicht verstanden
Hallo,

genau das will ich NICHT ^^ ich will stattdessen eine
„variable aus dem wert heraus erstellen“.

da müssen wir mal abwarten ob Dich einer der Experten versteht, ich verstehe kein Wort. :frowning:

halt genau so wie in javascript :wink:

JavaScript kenne ich nicht.

Gruß, Rainer

Hallo Rainer,

genau das will ich NICHT ^^ ich will stattdessen eine
„variable aus dem wert heraus erstellen“.

da müssen wir mal abwarten ob Dich einer der Experten
versteht, ich verstehe kein Wort. :frowning:

ich bin ja Experte, so stehts ja in meiner ViKa und die lügt ja nicht :smile:))
Ich habe das so verstanden, jetzt auf Excel-Vba bezogen, in einer Tabelle stehen untereinander:

Apfel
Banane
Apfel
Apfel
Kirsche
Banane

Jetzt soll aufgrund der Tabelleneinträge etwas erzeugt werden, was diesem gleichwertig ist

Dim Apfel as Integer, Banane as Integer, Kirsche as Integer
Apfel=Application.worksheetfunction.countif(range(„A1:A100“),„Apfel“)
Banane=Application.worksheetfunction.countif(range(„A1:A100“),„Banane“)
Kirsche=Application.worksheetfunction.countif(range(„A1:A100“),„Kirsche“)

wenn ich mich mit der Syntax nicht verhauen habe ergibt
Application.worksheetfunction.countif(range(„A1:A100“),„Kirsche“)
die Anzahl der Zellwerte in Spalte A die den Stringwert „Kirsche“

Zu Zeiten als es nur Basic gab (ZX81, Sinclair Spectrum) und es mittels Interpreter und nicht mittels Compiler ausgeführt wurde, wäre sowas gegangen, zur Laufzeit im Code rumzuändern mittels Peek und Poke.
Man konnte damals einen Basiccode ablaufen lassen der sich selbst verändern konnte, denn man kannte den Arbeitsspeicherbereich wo er steht bei der Ausführung, da man den Code selbst geschrieben hatte wußte man auch an welchen Stellen in der zeichenfolge des Codes was stand und das konnte man dann bequem aufgrund irgendwelcher Bedingungen abändern.
Problematisch dabei sind dann natürlich die Stringlängen, wenn ich die Variable Banane durch Apfel ersetze, was mache ich mit dem 6ten Buchstaben, eine 0 reinschreiben, eine 32 oder eine 255…
Leider habe ich vergessen wie ich das damals löste, ich mutmaße stark durch feste gleichlange Längen oder so.
Gruß
Reinhard

haben usw.

halt genau so wie in javascript :wink:

JavaScript kenne ich nicht.

Gruß, Rainer

Hallo Reinhard,

da müssen wir mal abwarten ob Dich einer der Experten
versteht, ich verstehe kein Wort. :frowning:

ich bin ja Experte, so stehts ja in meiner ViKa und die lügt
ja nicht :smile:))

*gg* Du warst ja auch gemeint! :smile:
Die Forenregeln haben mir nur verboten, Deinen Namen zu schreiben.

Ich habe das so verstanden, jetzt auf Excel-Vba bezogen, in
einer Tabelle stehen untereinander:

Apfel
Banane
Apfel
Apfel
Kirsche
Banane

Jetzt soll aufgrund der Tabelleneinträge etwas erzeugt werden,
was diesem gleichwertig ist

Dim Apfel as Integer, Banane as Integer, Kirsche as Integer
Apfel=Application.worksheetfunction.countif(range(„A1:A100“),„Apfel“)
Banane=Application.worksheetfunction.countif(range(„A1:A100“),„Banane“)
Kirsche=Application.worksheetfunction.countif(range(„A1:A100“),„Kirsche“)

wenn ich mich mit der Syntax nicht verhauen habe ergibt
Application.worksheetfunction.countif(range(„A1:A100“),„Kirsche“)
die Anzahl der Zellwerte in Spalte A die den Stringwert
„Kirsche“

Ach so! Z#hlen, wie oft ein bestimmtes Wort in einem Feld vorkommt!

OK, es geht um Access, denn da steht etwas von einer DB. Die Lösung ist dann IMO ein Filter mit dem Suchbegriff und die Anzahl Datensätze ermitteln. Etwa …

RS = „SELECT * FROM TABELLE WHERE ‚Feldname‘ = ‚Suchbegriff‘“;
Zaehler = .Recordcount

… mit VBA bin ich nicht fit genug, daraus einen lauffähigen Code zu machen.

Zu Zeiten als es nur Basic gab (ZX81, Sinclair Spectrum) und
es mittels Interpreter und nicht mittels Compiler ausgeführt
wurde, wäre sowas gegangen, zur Laufzeit im Code rumzuändern
mittels Peek und Poke.

*gg* So etwas habe ich auf meinem Commodore auch gebaut. :smile:

Man konnte damals einen Basiccode ablaufen lassen der sich
selbst verändern konnte, denn man kannte den
Arbeitsspeicherbereich wo er steht bei der Ausführung, da man
den Code selbst geschrieben hatte wußte man auch an welchen
Stellen in der zeichenfolge des Codes was stand und das konnte
man dann bequem aufgrund irgendwelcher Bedingungen abändern.
Problematisch dabei sind dann natürlich die Stringlängen, wenn
ich die Variable Banane durch Apfel ersetze, was mache ich mit
dem 6ten Buchstaben, eine 0 reinschreiben, eine 32 oder eine
255…

*gg* Was man nicht alles baut, wenn Speicher knapp ist. :smile: Ich bin damals schnell zu Assembler gekommen, damit konnte man den Platz noch besser ausnutzen und schnell war’s auch. Für Rechnungen, die VB heute in 5 Minuten erledigt habe ich nur drei Tage benötigt. :smile:

Gruß, Rainer

Ach so! Z#hlen, wie oft ein bestimmtes Wort in einem Feld
vorkommt!
OK, es geht um Access, denn da steht etwas von einer DB. Die
Lösung ist dann IMO ein Filter mit dem Suchbegriff und die
Anzahl Datensätze ermitteln. Etwa …
RS = „SELECT * FROM TABELLE WHERE ‚Feldname‘ = ‚Suchbegriff‘“;
Zaehler = .Recordcount

Hallo Rainer,
ich trau mir ja zu mit Excel-Vba „Hello World“ zu schreiben, zur Not Hochkant, 5farbig , per Outlook zu versenden oder sonstwie:smile:
Aber Access-Vba, Word-Vba, CorelDraw-Vba, Outlook-Vba, da verstehe ich nur das Gebäude wo die Bahnhofsuhr dranhängt *gg*
Gruß
Reinhard

*gg* So etwas habe ich auf meinem Commodore auch gebaut. :smile:

Aha, C64 oder gar dieser C128.

*gg* Was man nicht alles baut, wenn Speicher knapp ist. :smile:

Es gab damals Zeitschriften, in der einen gabs mal einen Wettbewerb wer das beste Spiel bastelt das mit 1000 Bytes Programmcode auskommen mußte.
Klar kam dann nur schwarzweiß was raus wo ein Ball mit Schlägern hin und her gespielt werden konnte. Aber da wurde um jedes Bit gerungen :smile: Mit auch dadurch gabs dann das 2000Jahr Problem, weil sie alle halt nur 2 Byte fürs Jahr vorgesehen hatten.
Allein der Arbeitsspeicher von heutigen DiscounterPCs hätte, sofern überhaupt damals lieferbar, Unsummen gekostet.
Gruß
Reinhard

Hallo,
ja, dass interessiert mich auch.
Ich kenne sowas von PHP ungefähr so:

if (7 == 7)
$varname = „Bananen“;
else
$varname = „Kirschen“;

$$varname = 122; // Weil 7 nun mal 7 ist, steht jetzt 122 in der Variablen $Bananen

Ich wüßte auch gern, wie das in VBA geht, denn ich habe eine Funktion:

function xyz(arg1, arg2, arg3, … , arg127) as sonstwas

end function

In der Funktion muss ich mit all den Argumenten, die ich auch nicht als Array angeben kann sondern nur einzeln (glaubt mir!) das Gleiche machen.
Also brauche ich eine Schleife, muss aber jeweils die Variablennamen pro Durchlauf austauschen (von arg1 bis arg127). In PHP mit $$ kein Akt, aber in VBA?

Wo ist der Retter, der die Lösung kennt?
8:o|