User Tools

Site Tools


vba:cast:readablename

This is an old revision of the document!


[VBA] readableName()

Diese Funktion erstellt aus einem technischen Namen ein halbwegs lesbarer Namen. Ich verwende die Funktion häufig um automatisch generierte Reports mit besser lesbaren Titeln zu versehen. Insofern ist die Funktion das Gegenpart von techname.

Download udf_readablename.bas

Definition

name = readableName(technischer Name [, Type des technischen Namens])
Public Function readableName( _
        ByVal iTechName As String, _
        Optional ByVal iType As rnTechNameType = rnAutomaitc _
) As String
  • iTechName Der Technische Name
  • rnTechNameType Art der Worttrennung

Beispiele

Die Beispiele wurden im Direktfenster erstellt

?readableName("ITEM_NAME")
Item Name
 
?readableName("ItemName1")
Item Name 1
 
?readableName("Ort", rnUnderline)
Ort

Code

udf_readableName.bas
'-------------------------------------------------------------------------------
'File         : udf_readableName.bas
'               Copyright mpl by ERB software
'               All rights reserved
'               http://wiki.yaslaw.info/dokuwiki/doku.php/vba/cast/strtodate
'Environment  : VBA 2007 +
'Version      : 1.0.1
'Name         : readableName
'Author       : Stefan Erb (ERS)
'History      : 17.06.2014 - ERS - Creation
'               08.07.2014 - ERS - kleinere Korrekturen
'-------------------------------------------------------------------------------
Option Explicit
 
Public Enum rnTechNameType
    rnUnderline     'Die Wörter sind beim technischen Namen mit Unterstriche 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
 
Private rxCacheCamelCase As Object
 
'/**
' * 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 = IIf(InStr(iTechName, "_") > 0, rnUnderline, rnCamelCase)
            GoTo PARSE  'Try with the neu type
 
        Case rnUnderline
            words = split(iTechName, "_")
 
        Case rnCamelCase
            'initialize cached regExp
            If rxCacheCamelCase Is Nothing Then
                Set rxCacheCamelCase = CreateObject("VBScript.RegExp")
                rxCacheCamelCase.Global = True
                rxCacheCamelCase.pattern = "([A-Z][a-z_]*|[a-z_]+|[\d_]+)"
            End If
 
            If Not rxCacheCamelCase.Test(iTechName) Then
                ReDim words(0): words(0) = iTechName
            Else
                Dim mc As Object: Set mc = rxCacheCamelCase.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
vba/cast/readablename.1404814230.txt.gz · Last modified: 08.07.2014 12:10:30 by yaslaw