【问题标题】:Is there a way to insert and edit a geographic map chart in an Excel macro?有没有办法在 Excel 宏中插入和编辑地理地图图表?
【发布时间】:2021-05-25 12:41:58
【问题描述】:

我想要我提取的数据以在县级插入州地图,但还要添加适当的标题并更改图表内“格式化数据系列”工具栏中的发散间隔。

我记录了这个过程,代码将插入状态图,但不会进行我想要的编辑。

我的数据标题是:州县比率。

这是我记录的代码:

Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
ActiveWindow.SmallScroll Down:=-90
ActiveSheet.Shapes.AddChart2(494, xlRegionMap).Select
ActiveSheet.ChartObjects("Chart 8").Activate

ActiveChart.PlotArea.Select
ActiveChart.ChartTitle.Select
Selection.Caption = "NCAT LR by County"
ActiveChart.FullSeriesCollection(1).Select
ActiveChart.FullSeriesCollection(1).SeriesColorGradientStyle = _
    xlSeriesColorGradientStyleDiverging
ActiveChart.FullSeriesCollection(1).SeriesColorMinGradientStop. _
    StopPositionType = xlGradientStopPositionTypeNumber
ActiveChart.FullSeriesCollection(1).SeriesColorMinGradientStop.StopValue = _
    "-0.102"
ActiveChart.FullSeriesCollection(1).SeriesColorMidGradientStop. _
    StopPositionType = xlGradientStopPositionTypeNumber
ActiveChart.FullSeriesCollection(1).SeriesColorMidGradientStop.StopValue = _
    "0.81"
ActiveChart.FullSeriesCollection(1).SeriesColorMaxGradientStop. _
    StopPositionType = xlGradientStopPositionTypeNumber
ActiveChart.FullSeriesCollection(1).SeriesColorMaxGradientStop.StopValue = _
    "1.721"
With ActiveChart.FullSeriesCollection(1)
    .SeriesColorMinGradientStop.StopColor.RGB = 5287936
    .SeriesColorMinGradientStop.StopColor.TintAndShade = 0
    .SeriesColorMinGradientStop.StopColor.Transparency = 0
End With
With ActiveChart.FullSeriesCollection(1)
    .SeriesColorMidGradientStop.StopColor.ObjectThemeColor = 2
    .SeriesColorMidGradientStop.StopColor.TintAndShade = 0
    .SeriesColorMidGradientStop.StopColor.Transparency = 0
End With
With ActiveChart.FullSeriesCollection(1)
    .SeriesColorMaxGradientStop.StopColor.RGB = 255
    .SeriesColorMaxGradientStop.StopColor.TintAndShade = 0
    .SeriesColorMaxGradientStop.StopColor.Transparency = 0
End With
ActiveChart.FullSeriesCollection(1).SeriesColorMinGradientStop.StopValue = "0"
ActiveChart.FullSeriesCollection(1).SeriesColorMidGradientStop.StopValue = _
    "0.50"
ActiveChart.FullSeriesCollection(1).SeriesColorMaxGradientStop.StopValue = "1"
Application.CommandBars("Format Object").Visible = False

第一个错误出现在“ActiveSheet.ChartObjects("Chart 8").Activate”的地方,错误消息是:

“运行时错误'-2147024809 (80070057)'

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    这可能会让你更接近:

    Sub Tester()
    
        Dim cht As Chart, co, ws As Worksheet
        
        Set ws = ActiveSheet
        
        ws.Range("A1").CurrentRegion.Select
        
        Set co = ActiveSheet.Shapes.AddChart2(494, xlRegionMap)
        co.Visible = True
    
        Set cht = co.Chart 'this is the chart you just created
        
        With cht
            .ChartTitle.Caption = "NCAT LR by County"
            
            With .FullSeriesCollection(1)
                .SeriesColorGradientStyle = xlSeriesColorGradientStyleDiverging
                .SeriesColorMinGradientStop.StopPositionType = xlGradientStopPositionTypeNumber
                .SeriesColorMinGradientStop.StopValue = "-0.102"
                .SeriesColorMidGradientStop.StopPositionType = xlGradientStopPositionTypeNumber
                .SeriesColorMidGradientStop.StopValue = "0.81"
                .SeriesColorMaxGradientStop.StopPositionType = xlGradientStopPositionTypeNumber
                .SeriesColorMaxGradientStop.StopValue = "1.721"
        
                .SeriesColorMinGradientStop.StopColor.RGB = 5287936
                .SeriesColorMinGradientStop.StopColor.TintAndShade = 0
                .SeriesColorMinGradientStop.StopColor.Transparency = 0
                .SeriesColorMidGradientStop.StopColor.ObjectThemeColor = 2
                .SeriesColorMaxGradientStop.StopColor.RGB = 255
                
                .SeriesColorMinGradientStop.StopValue = "0"
                .SeriesColorMidGradientStop.StopValue = "0.50"
                .SeriesColorMaxGradientStop.StopValue = "1"
            End With
        End With
        
        Application.CommandBars("Format Object").Visible = False
    
    End Sub
    

    【讨论】:

    • 效果很好,谢谢!还有一个问题:是否有任何语法也可以自动调整地图的大小?
    • 您可以使用co.Top/Left/Height/Width 属性定位和调整大小
    • 完美!非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 2022-01-07
    相关资源
    最近更新 更多