utilizando name manipulación macro how gráficos create creación charttype chartobjects chart excel vba excel-vba charts

excel - name - Las llamadas repetidas de Chart.SetSourceData dan error 1004



how to create a graph macro in excel (2)

Esto no explica por qué ocurre el error. Esta es una solución.

Antes de llamar a SetSourceData , elimine todas las series existentes actualmente en el gráfico, y el código se ejecutará como se espera.

For j = cht.Chart.SeriesCollection.Count To 1 Step -1 cht.Chart.SeriesCollection(j).Delete Next j

No estoy seguro de por qué ocurre el error en primer lugar, pero esto hace que desaparezca.

Tengo un problema con una aplicación que se creó en Excel 2003 en mi empresa. La aplicación recupera datos de una fuente y actualiza una Tabla usando SetSourceData en una rutina VBA que pasa un Rango que contiene las celdas donde se escriben los datos relevantes.

La aplicación funciona perfectamente en Office 2003, pero cuando la aplicación se ejecuta en Office 2010 da este error:

Error ''1004'' en tiempo de ejecución: el método ''SetSourceData'' de object''_Chart ''falló.

He creado un bucle For en un archivo simple de Excel en Office 2010 y, dependiendo del número de columnas pasadas en el rango al gráfico, el error aparecerá tarde o temprano. Mientras más columnas pasen en el rango, más pronto saldrá. Supongo que esto tiene que estar relacionado con el número de series en el Gráfico (más columnas más series).

¿Es esto algún tipo de mecanismo / búfer en el Objeto Chart o Serie implementado en Office 2010 que no existía en Office 2003? El mismo bucle For nunca muestra un problema cuando se ejecuta en Office 2003 y no estoy seguro de cómo resolver este problema.

Hasta ahora solo he podido eliminar todas las Series que controlan el Error con una instrucción Goto para eliminar todas las series de la Colección de Series usando un bucle For Each para seleccionar todos los objetos en la Colección de Series del Gráfico. Si hago esto y reanudo la ejecución de la aplicación cuando paso nuevamente el Rango, todos los datos se pintan correctamente en el Objeto del Gráfico.

Ejemplo para reproducir el error. El siguiente código debe colocarse en un módulo de VBA en un nuevo libro de trabajo de Excel 2010. Ejecute Sub setDataChart y la aplicación se ejecutará hasta que se muestre el mensaje de error.

Sub setDataChart() Call createAColValues ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.SetSourceData Source:=Range("A1:FA6"), PlotBy:=xlColumns ActiveSheet.ChartObjects(1).Activate With ActiveChart.Parent .Height = 325 .Width = 900 .Top = 120 .Left = 10 End With Call updateValues Call sendData End Sub Sub sendData() Dim cht As ChartObject Set cht = ActiveSheet.ChartObjects(1) ''On Error GoTo delSeries: For i = 0 To 1000 cht.Chart.SetSourceData Source:=ActiveSheet.Range("A1:FA6"), PlotBy:=xlColumns Next i End Sub Sub createAColValues() Range("A1").Select ActiveCell.FormulaR1C1 = "1" Range("A2").Select ActiveCell.FormulaR1C1 = "2" Range("A1:A2").Select Selection.AutoFill Destination:=Range("A1:A6"), Type:=xlFillDefault Range("A1:A6").Select End Sub Sub updateValues() Range("B1").Select ActiveCell.FormulaR1C1 = "=RANDBETWEEN(0,10)" Range("B1").Select Selection.AutoFill Destination:=Range("B1:B6"), Type:=xlFillDefault Range("B1:B6").Select Selection.AutoFill Destination:=Range("B1:FA6"), Type:=xlFillDefault Range("B1:FA6").Select End Sub


Otra posibilidad es definir un rango con nombre para los datos que se definen utilizando la fórmula de Offset y las celdas de referencia apropiadas. Esto requiere que los datos sean contiguos, no cambien la fila y columna inicial en la que comienza, y que configure al menos una fórmula de referencia ( =COUNTA() en la columna / fila que contiene los datos) que se puede usar para configurar el alto / ancho del rango de desplazamiento.

De lo contrario, sería muy útil trabajar para sacar esto de las macros y ponerlo en la lógica de la hoja de trabajo.