1

在工作表中,我存储了我希望使用 VBA 创建的图表列表。例如,它将包含在一个列中:

  • xl3DA 区域
  • xl线

在我的 VBA 例程中,我定义了一个XlChartType变量,如下所示:

Dim chartType               As XlChartType

稍后在同一例程中,我尝试从工作表中读取图表类型,并使用以下代码将其分配给 chartType 变量(删除块中的其他代码行):

With Worksheets(chartDetailsWorksheet)

    'Variable initialisations
    chartType = Cells(2, 2).value

End With

但是代码失败,因为从工作表中读取的值被视为字符串(不足为奇)。我试过在网上寻找答案,但是......
我在想,就像在其他语言中一样,你可以进行类型转换来快速解决这个问题。但到目前为止,我发现的只是一个谈论编写自定义函数以将字符串值转换为XlChartType值的网站。

这是处理这个问题的唯一方法吗?

4

3 回答 3

1

您可以使用它来将字符串常量名称转换为其值。你是否应该是一个不同的问题。

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 GetTheValue()"
            .InsertLines 2, "GetTheValue = (" & s & ")"
            .InsertLines 3, "End Function"
        End With
        WhatIsTheValue = Application.Run("GetTheValue")

End Function
于 2012-07-02T15:42:45.850 回答
0

Don't do that.

On the sheet, store values in two columns, one visible, one hidden.
In the hidden column put numerical values for enum members. In the visible column put descriptive names (xlLine is not a descriptive name for a user). Then read the hidden column.

于 2012-07-02T12:28:52.387 回答
0

我了解您对自定义函数表示保留,但老实说,这是我将采取的路线,而不是可能通过用户干预或代码执行意外操作/删除/等的隐藏列。

该子例程从 Cells(2,2) 获取字符串值,并通过下面的函数将其转换为 xlChartType。

Sub ChartTypes()
Dim cht As Chart
Dim ws As Worksheet
Dim stringType As String
Dim chartType As XlChartType

Set ws = Sheets(1)

stringType = CStr(Cells(2, 2).Value)

'Use the function to return the correct xlChartType in the AddChart:
Set cht = ws.Shapes.AddChart( _
        GetChartTypeConstant(stringType), _
        50, 50, 300, 200).Chart
End Sub

这是在Set cObj.... 请注意,通过使用带有 case select 的函数,您可以使用更易于使用的名称,而不是“xlBarClustered”,您可以将其称为“Horizo​​ntal Bars”等。

Private Function GetChartTypeConstant(myString As String) As XlChartType
'This function returns an xlCharType constant value from a descriptive string
' which you will need to define or modify for your needs;
' using select case also means you can use more descriptive/user-friendly
' names on your worksheet.

    Select Case myString
    Case "xlBarClustered", "Clustered Bars", "Horizontal Bars"
        GetChartTypeConstant = xlBarClustered
    Case "xlColumnClustered", "Clustered Columns", "Vertical Columns"
        GetChartTypeConstant = xlColumnClustered
    Case "xlLine", "Lines Only"
        GetChartTypeConstant = xlLine

    'Additional cases can be added for
    ' additional chart types.
End Select


End Function

请注意,子或函数中没有错误处理。

于 2013-02-07T16:07:39.070 回答