Attribute VB_Name = "cast_readableName" '------------------------------------------------------------------------------- 'File : cast_readableName.bas ' Copyright mpl by ERB software ' All rights reserved ' http://wiki.yaslaw.info/dokuwiki/doku.php/vba/cast/readableName 'Environment : VBA 2007 + 'Version : 1.1.0 'Name : readableName 'Author : Stefan Erb (ERS) 'History : 17.06.2014 - ERS - Creation ' 08.07.2014 - ERS - kleinere Korrekturen ' 31.10.2014 - ERS - Cache auf Static umgestellt ' 28.01.2015 - ERS - rnSpace hinzugefügt '------------------------------------------------------------------------------- Option Explicit Public Enum rnTechNameType rnUnderline 'Die Wörter sind beim technischen Namen mit Unterstriche getrennt. FOO_BAR -> Foo Bar rnSpace 'Die Wörter sind mit Leerzeicen getrennt. FOO BAR -> Foo Bar rnCamelCase 'Die Wörter sind mit CamelCase getrennt. FooBar -> Foo Bar rnAutomaitc 'Die Funktion findet selber heraus, welcher Type es ist. Kommt ein _ im Text for, ist es rnUnderline, ansonsten rnCamelCase End Enum '/** ' * Entspricht dem Gegenteil von techName. macht aus Technischen Namen lesbare Namen ' * ' * name = readableName(technischer Name [, Type des technischen Namens]) ' * ' * @param String Der Technische Name ' * @param rnTechNameType Art der Worttrennung ' * @return String ' */ Public Function readableName( _ ByVal iTechName As String, _ Optional ByVal iType As rnTechNameType = rnAutomaitc _ ) As String Dim words() As String Dim idx As Integer parse: Select Case iType Case rnAutomaitc iType = Switch( _ InStr(iTechName, "_") > 0, rnUnderline, _ InStr(iTechName, " ") > 0, rnSpace, _ True, rnCamelCase _ ) GoTo parse 'Try with the neu type Case rnUnderline words = Split(iTechName, "_") Case rnSpace ReDim words(0): words(0) = iTechName Case rnCamelCase, rnSpace If Not rxCamelCase.test(iTechName) Then ReDim words(0): words(0) = iTechName Else Dim mc As Object: Set mc = rxCamelCase.execute(iTechName) ReDim words(mc.count - 1): For idx = 0 To mc.count() - 1 words(idx) = mc(idx) Next idx End If End Select readableName = strConv(Join(words, " "), vbProperCase) End Function Private Property Get rxCamelCase() As Object Static pRxCamelCase As Object If pRxCamelCase Is Nothing Then Set pRxCamelCase = CreateObject("VBScript.RegExp") pRxCamelCase.Global = True pRxCamelCase.pattern = "/(?!\s_)(?:[A-Z]?[^A-Z\s_]+)/g" End If Set rxCamelCase = pRxCamelCase End Property