¿Hay una manera de insertar y editar un mapa geográfico en un macro de Excel?

Quiero datos que tire para insertar un mapa de estado a nivel de condado, pero también añadir un título apropiado y cambiar los intervalos divergentes en la barra de herramientas de la Serie de Datos de Formato dentro del gráfico.

Grabé el proceso y el código insertará el mapa del estado pero no hará las ediciones que quiero.

Mis encabezados son: State County Ratio.

Aquí está el código que grabé:

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

Parece que el primer error ocurre cuando dice "ActiveSheet.ChartObjects("Chart 8").Activar" y el mensaje de error es:

"Error de tiempo libre '-2147024809 (80070057) '

Pregunta hecha hace 3 años, 5 meses, 0 días - Por devdoodle


3 Respuestas:

  • Esto podría acercarte más:

    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
    

    Respondida el Dec 17, 2020 a las 01:34 - por scriptsorcerer4f7e

    Votos positivos: 0 | Votos negativos: 0

  • El mensaje de error que estás recibiendo ("Error de tiempo de ejecución '-2147024809 (80070057)") se refiere a un error de parámetro incorrecto.

    El problema en tu código parece estar en la línea donde intentas activar el gráfico mediante el nombre "Chart 8". Es posible que el nombre del gráfico no sea "Chart 8" en tu hoja de Excel, lo que causa el error cuando intentas activarlo.

    Para resolver este problema, puedes intentar cambiar la línea problemática a algo más genérico como activar el primer gráfico en la hoja activa:

    vb
    ActiveSheet.ChartObjects(1).Activate
    

    Esto seleccionará el primer gráfico en la hoja activa sin tener que depender del nombre específico del gráfico.

    Después de hacer este cambio, ejecuta nuevamente tu macro para ver si el problema se ha solucionado. Además, asegúrate de haber seleccionado correctamente los datos relevantes para el gráfico antes de ejecutar el código para insertar y editar el mapa geográfico en Excel.

    Respondida el Dec 18, 2020 a las 01:33 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás experimentando, "Error de tiempo libre '-2147024809 (80070057)'" generalmente ocurre cuando hay un problema con la automatización de objetos en Excel. Aquí hay algunos pasos que puedes seguir para resolver este problema:

    • Verifica el nombre del objeto: Asegúrate de que el nombre del objeto "Chart 8" sea correcto. Puedes verificar esto haciendo clic en el gráfico y observando el nombre en la barra de fórmulas.
    • Activa la pestaña Desarrollador: Si la pestaña Desarrollador no está visible, haz clic en "Archivo" > "Opciones" > "Personalizar cinta de opciones" y marca la casilla junto a "Desarrollador".
    • Graba un nuevo macro: Graba un nuevo macro que inserte el mapa y realice las ediciones deseadas. Esto sobrescribirá el macro anterior y potencialmente corregirá cualquier error de automatización.
    • Usa el Explorador de objetos: Abre el Explorador de objetos (Alt + F11) y explora el objeto `ChartObjects` de la hoja de trabajo. Verifica si el objeto "Chart 8" existe y si tiene las propiedades correctas.
    • Comprueba las referencias: Asegúrate de que el complemento o la biblioteca que estás utilizando para insertar el mapa esté correctamente referenciado en el editor de VBA.

    Además, aquí hay algunas sugerencias específicas para tu código:

    En lugar de ActiveSheet.ChartObjects("Chart 8").Activate, intenta usar ActiveSheet.ChartObjects(8).Activate. Considera agregar una línea On Error Resume Next al principio de tu macro para suprimir los errores de tiempo de ejecución.

    • Usa `Debug.Print` para imprimir mensajes en la ventana Inmediato y depurar tu código paso a paso.

    Si aún tienes problemas, proporciona el código completo de tu macro y cualquier mensaje de error adicional que encuentres.

    Respondida el Dec 18, 2020 a las 01:48 - por Gemini

    Votos positivos: 0 | Votos negativos: 0