Converting a string representation of a constant into a constant?

前端 未结 2 534
礼貌的吻别
礼貌的吻别 2020-11-30 15:35

I\'m trying to accept a formatting constant from a data cell, so I have a string \"xlTotalsCalculationAverage\". How can I translate that into the Excel constant it represen

2条回答
  •  不知归路
    2020-11-30 16:13

    Since there is no really practical solution, you're generally stuck writing your own switch statements. Since the enums of the .NET Interop Libraries and VBA are, as far as I know, always the same, I wrote a program that generates VBA modules for each public enum inside a (list of) dll's. Here's the output for my Office.Core, PowerPoint, Word, Excel, Publisher and Outlook dll's:

    https://gitlab.com/jbjurstam/VbaHelpers/tree/master/GenerateVbaEnumHelpers/bin/Release/output

    Here's an example of the code it generates for each enum:

    Attribute VB_Name = "wMsoHyperlinkType"
    Function MsoHyperlinkTypeFromString(value As String) As MsoHyperlinkType
        If IsNumeric(value) Then
            MsoHyperlinkTypeFromString = CInt(value)
            Exit Function
        End If
    
        Select Case value
            Case "msoHyperlinkRange": MsoHyperlinkTypeFromString = msoHyperlinkRange
            Case "msoHyperlinkShape": MsoHyperlinkTypeFromString = msoHyperlinkShape
            Case "msoHyperlinkInlineShape": MsoHyperlinkTypeFromString = msoHyperlinkInlineShape
        End Select
    End Function
    
    Function MsoHyperlinkTypeToString(value As MsoHyperlinkType) As String
        Select Case value
            Case msoHyperlinkRange: MsoHyperlinkTypeToString = "msoHyperlinkRange"
            Case msoHyperlinkShape: MsoHyperlinkTypeToString = "msoHyperlinkShape"
            Case msoHyperlinkInlineShape: MsoHyperlinkTypeToString = "msoHyperlinkInlineShape"
        End Select
    End Function
    

    Admittedly, it's not practical to include thousand modules in your project, but it's quite rare that you really need this kind of functionality, so I'd just include the things I need at the particular occasion.

提交回复
热议问题