【问题标题】:Is there a Way to test if a Chart in Excel has its series stacked or not有没有办法测试 Excel 中的图表是否堆叠了其系列
【发布时间】:2014-12-03 05:55:46
【问题描述】:

据我了解,Chars 具有 ChartType as XlChartType 属性,但这是一长串枚举值。有没有办法测试图表是否使用堆叠系列而不列出所有?

我试图避免以下情况:

Select ActiveChart.ChartType
    Case xlAreaStacked 
        ....
    Case xlBarStacked
        ....
    Case xlColumnStacked 
        ....
   ... 1000 more Cases ....
End Select

【问题讨论】:

  • 只是一个小问题,使用 VBA 的 Select..Case 语法,您至少可以在一行中列出所有图表类型,例如Case xlAreaStacked, xlBarStacked, xlColumnStacked 但我仍然认为这是一个很好的问题,希望有人能提供答案。
  • 嗯......这确实是一个改进,所以感谢@Aiken的输入

标签: vba excel


【解决方案1】:

下面的一些示例代码用于生成带有请求的枚举成员的字典对象。

这里的代码改编自 dlmille 的回答:http://www.experts-exchange.com/Software/Office_Productivity/Office_Suites/MS_Office/Excel/Q_27613392.html

Sub tester()

    Dim dict

    Set dict = GetEnumLookup("Excel", "XlChartType")
    If Not dict Is Nothing Then
        'get string from numeric value and see if it contains "stacked"
        Debug.Print UCase( dict(XlChartType.xl3DAreaStacked) ) Like "*STACKED*"
        Debug.Print UCase( dict(XlChartType.xl3DArea) ) Like "*STACKED*"
    Else
        MsgBox "Enum not recognised!"
    End If


End Sub

'VB Project References required:
' Microsoft Visual Basic for Applications Extensibility
' TypeLib Information
Function GetEnumLookup(LibName As String, sEnumName As String) As Object

    Dim rv As Object
    Dim tl As TLI.TypeLibInfo
    Dim mi As TLI.MemberInfo
    Dim tiEnum As TLI.TypeInfo

    Dim vbProj As VBProject, oVBProjRef As Reference
    Set vbProj = ThisWorkbook.VBProject
    For Each oVBProjRef In vbProj.References

        'Debug.Print oVBProjRef.Name, oVBProjRef.FullPath
        If oVBProjRef.Name = LibName Then

            Set tl = New TypeLibInfo
            tl.ContainingFile = oVBProjRef.FullPath

            On Error Resume Next
            Set tiEnum = tl.GetTypeInfo(sEnumName)
            On Error GoTo 0

            If Not tiEnum Is Nothing Then
                Set rv = CreateObject("scripting.dictionary")
                For Each mi In tiEnum.Members
                     rv.Add mi.Value, mi.Name
                     'or if you want to map the other direction...
                     'rv.Add mi.Name, mi.Value
                Next mi
            End If

            Exit For
        End If

    Next oVBProjRef

    Set GetEnumLookup = rv
End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 2021-09-24
    相关资源
    最近更新 更多