将常量的string表示转换为常量?

我试图从一个数据单元接受格式化常量,所以我有一个string“xlTotalsCalculationAverage”。 我怎样才能把它转换成它所表示的Excel常量; 常数xlTotalsCalculationAverage等于整数2。

 ActiveSheet.ListObjects(1).ListColumns(RemainingHeader).TotalsCalculation = xlTotalsCalculationAverage 

是一个静态表示。

 TargetTotal = something("xlTotalsCalculationAverage") ActiveSheet.ListObjects(1).ListColumns(RemainingHeader).TotalsCalculation = TargetTotal 

是我的目标。

我可以做一个巨大的案例或切换语句,但重复所有可能的值似乎是愚蠢的。

我如何使Excel将此string转换为已知的常量值?

总是有这样的:

 Sub Tester() MsgBox WhatIsTheValue("xlTotalsCalculationAverage") MsgBox WhatIsTheValue("xlTotalsCalculationCountNums") End Sub Function WhatIsTheValue(s As String) As Variant Dim VBProj As VBIDE.VBProject Dim VBComp As VBIDE.VBComponent Dim CodeMod As VBIDE.CodeModule Set VBProj = ActiveWorkbook.VBProject Set VBComp = VBProj.VBComponents("modTemp") Set CodeMod = VBComp.CodeModule With CodeMod .DeleteLines 1, .CountOfLines .InsertLines 1, "Public Function GetEnumVal()" .InsertLines 2, "GetEnumVal = " & s .InsertLines 3, "End Function" End With WhatIsTheValue = Application.Run("GetEnumVal") End Function 

但真的 – 不要这样做。

由于没有真正实用的解决scheme,因此通常不愿意编写自己的switch语句。 由于.NET Interop Libraries和VBA的枚举总是相同,所以我编写了一个程序,为每个公共枚举生成一个(列表)dll的VBA模块。 这是我的Office.Core,PowerPoint,Word,Excel,Publisher和Outlook dll的输出:

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

以下是为每个枚举生成的代码示例:

 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 

无可否认,在您的项目中包含上千个模块是不现实的,但您真的需要这种function的情况非常罕见,所以我只在特定的场合包含我需要的东西。