Enums - intelligent!

.. das wohl mächtigste Werkzeug in Bill Gates' Büro-Sippe. Ob reine Formeln, PowerQuery oder VBA. Hier bleiben kaum Wünsche unerfüllt.
Benutzeravatar
thowe
Beiträge: 199
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 79 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: Enums - intelligent!

#11

Beitrag von thowe »

was du aber machen kannst lieber heb ist folgendes:

Code: Alles auswählen

' List friendly names of Unicode characters
Public Enum eUnicodeConst
    Doppeltilde
    WeiteresZeichen
    '....
End Enum


'---------------------------------------------------------------------------------------
' thanks to: Adam Walle @stackoverflow
'---------------------------------------------------------------------------------------
'
Public Function GetUnicode(strText As eUnicodeConst) As String
    Select Case strText
        Case Doppeltilde
            GetUnicode = ChrW(7668)
        Case WeiteresZeichen
            'GetUnicode= ChrW(????)
    End Select
End Function

'how to use?
'just a simple testing
Sub TestGetUnicode()

    Debug.Print GetUnicode(Doppeltilde)

End Sub

Beachte die IntelliSense beim Funktionsaufruf.... :-)

lg
Folgende Benutzer bedankten sich beim Autor thowe für den Beitrag:
d'r Bastler
Benutzeravatar
d'r Bastler
Beiträge: 673
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 176 Mal
Danksagung erhalten: 91 Mal

Re: Enums - intelligent!

#12

Beitrag von d'r Bastler »

Moin thowe,

um Deine Antwort auf meine Frage "gibt es Trick?" kurz zu fassen: Nein!

Schade - dennoch Danke!

Ooops! Da war ich wohl zu schnell!! Das mit den FriendlyNames & Select Case ist natürlich ein Workaround, der viele Türen öffnet!!

Da wird doch gleich nochmal gebastelt ;-)
lg
Zuletzt geändert von d'r Bastler am 29. Sep 2024, 17:02, insgesamt 1-mal geändert.
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
xlKing
Beiträge: 30
Registriert: 30. Mai 2024, 19:42
Hat sich bedankt: 2 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Enums - intelligent!

#13

Beitrag von xlKing »

Hi Heb,

Enums sind wie der Name schon sagt rein Numerisch. Sie erwarten also eine beliebige, zumeist Ganze Zahl die du entweder zuweisen oder es lassen kannst. Wenn du darauf verzichtest wird eine Natürliche Zahl (beginnend bei 0 aufsteigend) automatisch zugewiesen. Der Sinn dahinter ist, dass man Variablen benannte Werte zuweisen kann. Statt Wenn 1 dann dies, wenn 2 dann das usw. schreibt man Wenn Name1 dann dies, sonst wenn Name2 dann das usw.

Enums werden üblicherweise im Modulkopf, also vor der ersten Prozedur generiert. In diesem Bereich sind Funktionsnamen nicht zulässig. Daher musst du Konstante Zahlen zuweisen.

Die Rückgabe von Zeichen in Enums nicht vorgesehen. Dafür gibt's die CONST-Anweisung. Wenn du dennoch Zeichen zurückgeben willst, kannst du das über eine Funktion machen.

Code: Alles auswählen

Enum eSym
 DoppelTilde = 8776
 Haken = 10003
End Enum
Function getSign(Sign As eSym) As String
  getSign = ChrW(Sign)
End Function
Sub Test()
  ActiveCell.Value = getSign(DoppelTilde)
End Sub
Nachtrag: thowe war schneller.

Gruß Mr. K.
Folgende Benutzer bedankten sich beim Autor xlKing für den Beitrag:
d'r Bastler
Benutzeravatar
d'r Bastler
Beiträge: 673
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 176 Mal
Danksagung erhalten: 91 Mal

Re: Enums - intelligent!

#14

Beitrag von d'r Bastler »

Code: Alles auswählen

Sub Test()
  ActiveCell.Value = getSign(eSym.[und jetzt klappt's auch mit dem IntelliSense!])
End Sub
Klasse! Lieben Dank Euch beiden!
lg
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
thowe
Beiträge: 199
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 79 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: Enums - intelligent!

#15

Beitrag von thowe »

Keine Ahnung was du unter Trick dir vorstellst.
Die von mir vorgestellte Lösung ist ein denkbarer Kniff und du kannst letztendich via IntelliSens auf deine DoppelTilde zugreifen.
Ein anderer Ansatz ist via Klassenmodul...
Man muss eben zur Kennnis nehmen das es sich bei Enum um Integer handelt. Korrekt schriebe man

Code: Alles auswählen

Public Enum eUnicodeConst
    Doppeltilde = 1
    WeiteresZeichen = 2
    '....
End Enum
Da Enum Aufzählungen sind weiß VBA automatisch dassZB "DoppelTilde" 1 ist...
Benutzeravatar
d'r Bastler
Beiträge: 673
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 176 Mal
Danksagung erhalten: 91 Mal

Re: Enums - intelligent!

#16

Beitrag von d'r Bastler »

Moin thowe, moin xlKing,

als Synonym für Trick kann man den Kunstgriff nehmen, im weitesten neudeutschen Sinne auch gerne Workaround. Und das habt Ihr beide ja in bravour geliefert. Entsprechend habe ich ein bisschen weiter herumgewerkelt und mir eine kleine Enum gebaut:

Code: Alles auswählen

Enum eSym
    similar = 8776
    okay = 10004
    todo = 10008
    promille = 8240
    promyria = 8241
    infinit = 8734
    average = 8960
    fract_13 = 8531
    fract_23 = 8532
    fract_15 = 8533
    fract_25 = 8534
    fract_35 = 8535
    fract_45 = 8536
    fract_16 = 8537
    fract_56 = 8538
    fract_18 = 8539
    fract_38 = 8540
    fract_58 = 8541
    fract_78 = 8542
End Enum
wobei meine kleine Symbol-Bastelei (etwas angepasst: Long statt Byte und die Iteratoren als Filter) gute Dienste geleistet hat.

Um diese Symbole jetzt in Sheets einzubinden kann man übrigens auf die Funktionen verzichten. Ein einfaches

Code: Alles auswählen

Sub Test()
    ActiveCell = ChrW(eSym.okay)
End Sub
genügt, z.B. auch um die Symbole in Arrays zum Füllen von Zellen zu nutzen. Strings oder Variants funktionieren leider nicht.

lg
Folgende Benutzer bedankten sich beim Autor d'r Bastler für den Beitrag:
thowe
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
thowe
Beiträge: 199
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 79 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: Enums - intelligent!

#17

Beitrag von thowe »

Super heb,

danke!

Jetzt mal "ne 'blöde Frage"..

Wenn ich das Symbol "combined screen" haben möchte. Dieses hat den Code 8418,lt: screen combining enclosed. Welche Schriftart müsste ich da noch einstellen, zur bezughabenden Zelle? Bei mir zeigt Code 8418 nur das Symbol für broken Char an...

lg
Benutzeravatar
d'r Bastler
Beiträge: 673
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 176 Mal
Danksagung erhalten: 91 Mal

Re: Enums - intelligent!

#18

Beitrag von d'r Bastler »

Moin thowe,

wie es mit mancher 'blöden' Frage so ist: Sie lassen mich blöd aussehen :lol:

Zum Test habe ich die 8414 mal eben in meine eNum eingebaut und erhalte in der Zelle tatsächlich nichts. Interessant ist aber, dass in der Bearbeitungsleiste die rechte Hälfte eines Bildschirms auftaucht.

Ein Phänomen, dass man mit vielen Codes im Bereich 8400-8500 (und wahrscheinlich auch anderen) sehen kann. Während mit meiner Symbol-Spielerei die Spalte A leer bleibt, gibt's in der Bearbeitungsleiste durchaus was zu sehen.

Hilft zwar nicht direkt, bietet Symbol-Profis aber vielleicht einen Hinweis zur Lösung...

lg
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
d'r Bastler
Beiträge: 673
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 176 Mal
Danksagung erhalten: 91 Mal

Re: Enums - intelligent!

#19

Beitrag von d'r Bastler »

8414 8418, sorry
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast