Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1272to1276
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

Von Systemkonstanten statt Wert den Text abfragen

Von Systemkonstanten statt Wert den Text abfragen
Martin
Hallo,
bei der Abfrage von Systemkonstanten (z.B. MsoControlType) werden die Konstanten stets als Zahl wiedergegeben. Ist es möglich direkt die Bezeichnung solcher Systemkonstanten abzufragen?
Hier mal zwei einfache Beispiele anhand einer MsgBox und der Calculation-Eigenschaft:
Beispiel 1:
Sub TestKonstante()
Dim mbr As VbMsgBoxResult
mbr = MsgBox("Kann die mbr-Konstante als Text ausgegeben werden?", vbYesNoCancel)
'2 = vbCancel
'6 = vbYes
'7 = vbNo
Debug.Print mbr
End Sub

Beispiel 2:
Sub TestKonstante2()
Dim CalcState As XlCalculation
CalcState = Application.Calculation
'-4105 = xlCalculationAutomatic
'-4135 = xlCalculationManual
'    2 = xlCalculationSemiautomatic
Debug.Print CalcState
End Sub

Viele Grüße
Martin
AW: Von Systemkonstanten statt Wert den Text abfragen
15.08.2012 12:28:48
Hajo_Zi
Hallo Martiun,
If MsgBox("Wollen Sie den Auftrag wirklich löschen.", vbYesNo + vbQuestion, "Löschabfrage ?") = vbYes Then
MsgBox "Ja"
Else
MsgBox "Nein"
End If

AW: Von Systemkonstanten statt Wert den Text abfragen
15.08.2012 12:35:28
Martin
Hallo Hajo,
vielen Dank für die Antwort. Mir geht es diesmal ums Prinzip, ob die Bezeichnungen von Systemkonstanten abgefragt werden können. Beim "MsoControlType-Wert" ist die Liste der Möglichkeiten schon erheblich länger.
msoControlActiveX
msoControlAutoCompleteCombo
msoControlButton
msoControlButtonDropdown
msoControlButtonPopup
msoControlComboBox
msoControlCustom
msoControlDropdown
msoControlEdit
msoControlExpandingGrid
msoControlGauge
msoControlGenericDropdown
msoControlGraphicCombo
msoControlGraphicDropdown
msoControlGraphicPopup
msoControlGrid
msoControlLabel
msoControlLabelEx
msoControlOCXDropdown
msoControlPane
msoControlPopup
msoControlSpinner
msoControlSplitButtonMRUPopup
msoControlSplitButtonPopup
msoControlSplitDropdown
msoControlSplitExpandingGrid
msoControlWorkPane
Hier würde ich mit "Select Case" arbeiten. Aber ist der ganze Schreibaufwand wirklich notwendig oder gibt es auch eine einfache Lösung?
Viele Grüße
Martin
Anzeige
Warum willst du das denn tun, ...
15.08.2012 17:05:19
Luc:-?
…Martin?
Überleg mal, warum es diese, meist Enumerationen, gibt! Sie waren und sind als Pgmiererleichterung gedacht → deshalb sind ihre Namen auch so deutlich sprechend, was bei Schlüsseln eher unüblich wäre. Dahinter stehen idR Zahlwerte und nur auf die kommt es letztlich an! Mir ist keine Methode bekannt, mit der man diese Namen (mit VBA) automatisiert in Erfahrung bringen könnte, zumal sie unterschiedlichen Gruppen bzw Enumerationen nicht redundanzfrei zugeordnet sind. -4142 erscheint so mal als xlNone, mal als xlLinestyleNone und wohl auch noch anders; 0 kann unter der Enumeration vbTriState vbFalse, unter msoTriState msoFalse heißen. Die Zahlenwerte der von dir angeführten Konstt wiederholen sich zumindest zT garantiert auch bei anderen Enumerationen, was du im VBE-Objektmanager leicht überprüfen kannst. Außerdem ist das ganze Konstantensystem von xlVBA ziemlich willkürlich, mal negative (hexdez), mal positive Werte, die anscheinend auch noch je nach Pgmierer-Gusto verwendet wurden, zB Zellrahmen (Range-Objekt): Die Indizes 1…4 des Auflistungsobjekts haben gar keinen Namen, nur 5 u.6 (Diagonalen); ab 7 sind die real sichtbaren Rahmen durchnummeriert, aber in einer anderen Reihenfolge, und mit Namen versehen; Gleiches gilt dann auch für 11 u.12 als vert/horiz Innenrahmen; 1…4 kann dann auch für das FormatCondition-Objekt verwendet wdn, allerdings gibt's dafür dann auch eine besondere, negative Enumeration, die beim Range-Objekt nicht angewendet wdn kann…
Die wdPgmierer waren übrigens nicht so verschwenderisch mit Konstantennamen!
Alles klar?! ;-)
Gruß Luc :-?
Anzeige
AW: Warum willst du das denn tun, ...
15.08.2012 18:15:26
Martin
Hallo Luc,
vielen Dank für deine ausführliche Antwort. Ich wollte mir ein kleines Tool schreiben, dass Eigenschaften von Objekten ausliest. Wenn mir Excel für ein CommandBar-Control bei Type (MsoControlType) die Zahl 4 ausspuckt, kann ich damit nicht viel anfangen. Es hat mich daher nur interessiert, ob die Konstantenbeschreibung irgendwie ausgelesen werden kann oder eine (vielzeilige) "Übersetzung" (z.B. mit Select Case) notwendig. Wenn eine Variable korrekt deklariert ist, werden im VBA-Editor die möglichen Konstanten-Werte in Wortform vorgeschlagen:
Userbild
Daher hatte ich gehofft, dass die Werte irgendwie auch entsprechend als Text ausgegeben werden können.
Viele Grüße
Martin
Anzeige
AW: Warum willst du das denn tun, ...
15.08.2012 19:18:23
Nepumuk
Hallo,
aber du bennötigst dazu einen Verweis auf die "Typelib Information". Schau mal ob du die in den Verweisen findest. Wenn nicht, dann hier herunterladen:
http://de.dll-files.com/tlbinf32.dll.html
Hier mal ein Beispiel wie du die MsoControlType-Konstanten auslesen kannst:
Public Sub ParseConstant()
    Dim objTypeLibApp As TLIApplication, objTypeLibInfo As TypeLibInfo
    Dim objConstantInfo As ConstantInfo, objMemberInfo As MemberInfo
    Set objTypeLibApp = New TLIApplication
    Set objTypeLibInfo = objTypeLibApp.TypeLibInfoFromFile( _
        "C:\Program Files\Common Files\Microsoft Shared\OFFICE11\MSO.DLL")
    For Each objConstantInfo In objTypeLibInfo.Constants
        If objConstantInfo.Name = "MsoControlType" Then
            For Each objMemberInfo In objConstantInfo.Members
                Debug.Print objMemberInfo.Name, objMemberInfo.Value
            Next
            Exit For
        End If
    Next
    Set objTypeLibInfo = Nothing
    Set objTypeLibApp = Nothing
End Sub

Gruß
Nepumuk
Anzeige
AW: Warum willst du das denn tun, ...
15.08.2012 20:00:32
Martin
Hallo Nepumuk,
das klappt wirklich super. Ich beneide dich um dein Knowhow und frage mich woher du dein Fachwissen beziehst! Vielen Dank!
Martin
AW: Warum willst du das denn tun, ...
15.08.2012 20:19:02
Nepumuk
Hallo,
Internet - MSDN - Excel-Hilfe - VB-Hilfe - ein paar Bücher - und nie fragen, sondern immer versuchen es selber herauszubekommen wie's geht. Eine Lösung prägt sich viel besser ein, wenn man ein Erfolgserlebnis damit verbinden kann.. Die Fragen hole ich mir aus den Excelforen, da wird nämlich nach Sachen gefragt auf die ich nicht mal im Traum kommen würde.
Z.B. wie man aus Libraries Konstanten auslesen kann. ;-)
Gruß
Nepumuk
Anzeige
AW: Warum willst du das denn tun, ...
15.08.2012 23:06:42
Martin
Hallo Nepumuk,
na gut, dann werde ich hier weiterhin fleißig exotische Fragen stellen, damit du dich auch künftig weiterbilden kannst ;-)
Viele Grüße
Martin

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige