Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
892to896
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
892to896
892to896
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

String als Konstantenname auswerten

String als Konstantenname auswerten
03.08.2007 11:29:00
c0bRa
Hio...
Vielleicht ein banales Problem, für das eine einfache Funktion existiert, aber ich komm einfach nicht drauf.
Ich bekomme aus einer Funktion einen String geliefert, z.B.: vbYesNo oder vbAbortRetryIgnore
Jetzt will ich prüfen, ob zu diesem String eine Konstante in Excel existiert und falls ja, den Wert dafür auslesen (wie wenn ich im Direktfenster ?vbYesNo eingebe).
Also:
vbYesNo = 4
vbAbortRetryIgnore = 2
vbCrLF = "
"

Ich hab schon mit Environ(), Val() und VarType() rumprobiert, aber VarType sagt mir nur Type = 8 (String), Val gibt mir grundsätzlich ne 0 und Environ gibts mir nur den String wieder aus.
Hat einer ne Lösung parat?
Danke im Voraus
c0bRa

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
MsgBox vbYesNo - Ergebnis 4
03.08.2007 12:06:00
Herby
Hallo C0bRa
meinst du so ?
MsgBox vbYesNo
Viele Grüße
Herby

AW: MsgBox vbYesNo - Ergebnis 4
03.08.2007 12:12:00
c0bRa
Hio...
Das Ergebnis passt ja, aber ich krieg das vbYesNo als String aus einer Funktion...
Hier mal vereinfacht (natürlich sollte das auch mit den anderen x Konstanten von Excel gehen):
Code aus Modul Modul1:
Option Explicit
Sub test()
    Dim s As String
    s = "vbyesno"
    
    'Hier müsste dann ne Funktion
    'stehen, die mir s als Konstante
    'interpretiert, und den Wert wiedergibt.
    
    MsgBox s 'Hier sollte dann 4 rauskommen.
End Sub

c0bRa

Anzeige
noch Offen (oT)
03.08.2007 12:21:55
c0bRa

AW: MsgBox vbYesNo - Ergebnis 4
03.08.2007 13:15:15
ingUR
Hallo, @c0bRa,
m.E. ist Dein Vorhaben ohne eine eigene Indextabelle nicht durchführbar, da die "Sichtnamen" der Konstanten, zur Laufzeit bereits Zahlen sind, so dass intern nur im Compiler die Zuordnung von String und Zahl erfolgt.
Wenn Du die diese Referenzliste von Namen und Zahlenzuordnung benötigtst, dann sollte sie zu finden sein, ansonsten stelle ich sie zusammen.
Ich lasse auch weiterhin die Frage als unbeantwortet, da mein Vorschlag natürlich nicht sehr "elegant" ist.
Gruß,
Uwe

AW: MsgBox vbYesNo - Ergebnis 4
03.08.2007 13:26:00
mumpel
Hallo!
Nicht ganz elegant, aber wie wäre es mit Select Case? z.B.

Sub test()
Dim s As String
s = "vbyesno"
Select Case s
Case "vbyesno"
d = vbYesNo
MsgBox d
Case "vbokonly+vbinformation"
d = vbOKOnly + vbInformation
MsgBox d
End Select
End Sub


Anzeige
AW: MsgBox vbYesNo - Ergebnis 4
03.08.2007 13:47:52
c0bRa
Hio :)
Ist leider nicht so einfach... Es soll ja für alle Konstanten gehen, welche im Quelltext eines Projektes vorkommen könnten (zumindest für die Excelinternen und benutzten Objektbibliotheken. Ich durchforste den Quelltext eines VBA Projektes nach eben solchen Variablen.
Ich bin gradeben auf die Seite hier gestoßen, die eigentlich meinem Problem schon recht nahe kommt. speziell die Funktionen name2value und value2name... Nur krieg ich das nicht in VBA adaptiert, zumal es bei mir keine tlblib32.dll gibt.
Ne Referenzliste ist auch nicht so unbedingt das gelbe vom Ei. Ich dachte evtl. gibts irgend ne Funktion, die eben den Wert einer (Enum-?) Konstanten liefert.
Danke für die Mühe :)
c0bRa

Anzeige
AW: MsgBox vbYesNo - Ergebnis 4
03.08.2007 14:00:00
c0bRa
Hio all...
Ich glaub ich beerdige das dann wohl besser ;)
Da es anscheinend auch keine DLL gibt, welche zu dem Thema eine Funktion bietet und die man 1:1 adaptieren könnte mittels Private Declare Function, stampf ich das Vorhaben ein. Dann gibts eben nur farbige Zahlen :D
Danke trotzdem für eure Zeit und Mühe...
c0bRa

AW: MsgBox vbYesNo - Ergebnis 4
03.08.2007 18:11:44
ingUR
Hallo, @c0bRa,
vielleicht kann dieses Grundgerüst Dir bis zum Finden einer geeigenten DLL-Function ersatzweise die Aufgabe lösen, wobei die Pflegemöglichkeit des Datensatzes (eventuell in Tabellenbaltt) und der Suchmechanismus natürlich zu verbessern sind.

Option Explicit
Type udtRefList
Name As String
id As Long
Segm As String
End Type
Dim RefList(20) As udtRefList, maxRefListItems As Long
Private Sub initRefList()
Dim i As Integer
'MsgBoxStyles
maxRefListItems = 20
RefList(1).Name = "vbAbortRetryIgnore": RefList(1).id = vbAbortRetryIgnore
RefList(2).Name = "vbApplicationModal": RefList(2).id = vbApplicationModal
RefList(3).Name = "vbCritical": RefList(3).id = vbCritical
RefList(4).Name = "vbDefaultButton1": RefList(4).id = vbDefaultButton1
RefList(5).Name = "vbDefaultButton2": RefList(5).id = vbDefaultButton2
RefList(6).Name = "vbDefaultButton3": RefList(6).id = vbDefaultButton3
RefList(7).Name = "vbDefaultButton4": RefList(7).id = vbDefaultButton4
RefList(8).Name = "vbExclamation": RefList(8).id = vbExclamation
RefList(9).Name = "vbInformation": RefList(9).id = vbInformation
RefList(10).Name = "vbMsgBoxHelpButton": RefList(10).id = vbMsgBoxHelpButton
RefList(11).Name = "vbMsgBoxRight": RefList(11).id = vbMsgBoxRight
RefList(12).Name = "vbMsgBoxRtlReading": RefList(12).id = vbMsgBoxRtlReading
RefList(13).Name = "vbMsgBoxSetForeground": RefList(13).id = vbMsgBoxSetForeground
RefList(14).Name = "vbOKCancel": RefList(14).id = vbOKCancel
RefList(15).Name = "vbOKOnly": RefList(15).id = vbOKOnly
RefList(16).Name = "vbQuestion": RefList(16).id = vbQuestion
RefList(17).Name = "vbRetryCancel": RefList(17).id = vbRetryCancel
RefList(18).Name = "vbSystemModal": RefList(18).id = vbSystemModal
RefList(19).Name = "vbYesNo": RefList(19).id = vbYesNo
RefList(20).Name = "vbYesNoCancel": RefList(20).id = vbYesNoCancel
For i = 1 To maxRefListItems
RefList(i).Segm = "MsgBox"
Next i
End Sub
Sub test()
Dim s As String
If maxRefListItems  0 Or i = maxRefListItems
If ifound = 0 Then
SearchInRefList = 1E+32
Else
SearchInRefList = RefList(i).id
End If
End Function

Auf jeden Fall kommt hier: MsgBox s & " := " & SearchInRefList(s) eine 4 heraus ;).
Da ich nicht genau verstanden habe, ob nun nur eine Abfragerichtung oder beide Abfragerichtungen von Interesse sind, habe ich der Type-Definition von RefList noch ein Segment-Eintrag zugefügt, so dass auch nach via Kennzalen nach dem Bedeutungsstring gesucht werden könnte.
Also, vielleicht ist Deine Idee ja doch nioch nicht gestorben und es bedarf eben nur noch Zeit, bis dieser Forschlg durch eine bessere Funktion ausgetauscht.
Viel Erfolg bei der Nachforschung,
Uwe

Anzeige
AW: MsgBox vbYesNo - Ergebnis 4
03.08.2007 14:42:00
Herby
Hallo cObRa,
anbei mal die Liste mit den Excel-Konstanten für die Version 2003.
https://www.herber.de/bbs/user/44745.xls
Für dein Ziel wird sie nicht reichen, denn du brauchst dann noch die Konstanten von den anderen eingebundenen Objektbibliotheken, aber zumindest ein kleiner Anfang.
Viele Grüße
Herby
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige