titulo - El gráfico no se actualizará en Excel(2007)
rango de datos del grafico excel (30)
Tengo un documento de Excel (2007) con un gráfico (columna agrupada) que obtiene su serie de datos de celdas que contienen valores calculados
Los valores calculados nunca cambian directamente, sino solo como resultado del cambio de otras celdas en la hoja
Cuando cambio otras celdas en la hoja, las celdas de la serie de datos se recalculan y muestran nuevos valores, pero el gráfico basado en esta serie de datos se niega a actualizar automáticamente
Puedo hacer que el gráfico se actualice guardando / cerrando, o cambiando una de las configuraciones (como invertir el eje x / y y luego volver a colocarlo), o al volver a seleccionar la serie de datos
Todas las soluciones que he encontrado en línea no funcionan
- Sí, tengo el cálculo establecido en automático
- Ctrl + Alt + F9 actualiza todo bien, EXCEPTO el gráfico
- He recreado el gráfico varias veces, y en diferentes computadoras
He intentado scripts VBA como:
Application.Calculate
Application.CalculateFull
Application.CalculateFullRebuild
ActiveWorkbook.RefreshAll
DoEvents
Ninguno de estos actualizar o actualizar la tabla
Me doy cuenta de que si escribo sobre mi Serie de datos, números reales en lugar de cálculos, actualizaré el gráfico, es como si Excel no quisiera reconocer cambios en los cálculos
¿Alguien ha experimentado esto antes o sabe qué puedo hacer para solucionar el problema? Gracias
¡Este problema es ridículo! La solución de nadie me funcionó en 2010, pero basé la mía en tpascale''s:
Dim C As ChartObject
Set C = ActiveSheet.ChartObjects("CTR_Chart")
C.Chart.SetSourceData Source:=Range( _
"KeywordBreakdown!$A$8:$A$12,KeywordBreakdown!$E$8:$E$12")
Simplemente redefinió el rango de datos de origen. Si se trata de un rango con nombre, podría ser razonablemente limpio. Supongo que la mejor solución para esto es seguir intentando modificar diferentes propiedades del gráfico hasta que se actualice.
A partir de Excel 2013, está el método Chart.Refreh
( https://msdn.microsoft.com/de-de/library/office/ff198180.aspx ) que funcionó para mí:
Dim cht As ChartObject
For Each cht In ThisWorkbook.ActiveSheet.ChartObjects
cht.Chart.Refresh
Next cht
Acabo de pasar medio día en esto yo mismo.
Tengo una macro que cambia los valores que son los datos de un gráfico. Todo funcionó bien en Excel 2003, pero en Excel 2007 el gráfico parece perder toda la conexión a sus datos, aunque el cambio manual de los valores de los datos en dos columnas provocó un recálculo.
Mi solución ha sido hacer que todos los gráficos de la hoja activa sean invisibles antes del cambio en los datos, luego hacerlos visibles de nuevo y actualizarlos por una buena medida. (Solo parecen ser gráficos visibles que tienen este problema de actualización).
Esto funciona para mí y también maneja problemas similares con gráficos y objetos de gráficos. La actualización puede no ser necesaria - se necesitan más pruebas.
Dim chrt As Chart
Dim chrtVis As XlSheetVisibility
Dim sht As Worksheet
Dim bChartVisible() As Boolean
Dim iCount As Long
Dim co As ChartObject
On Error Resume Next
Set chrt = ActiveChart
If Not chrt Is Nothing Then
chrtVis = chrt.Visible
chrt.Visible = xlSheetHidden
End If
Set sht = ActiveSheet
If Not sht Is Nothing Then
ReDim bChartVisible(1 To sht.ChartObjects.Count) As Boolean
iCount = 1
For Each co In sht.ChartObjects
bChartVisible(iCount) = co.Visible
co.Visible = False
iCount = iCount + 1
Next co
End If
Hacer cosas macros que cambian los datos
If Not sht Is Nothing Then
iCount = 1
For Each co In sht.ChartObjects
co.Visible = bChartVisible(iCount)
co.Chart.Refresh
iCount = iCount + 1
Next co
End If
If Not chrt Is Nothing Then
chrt.Visible = chrtVis
chrt.Refresh
If chrt.Visible Then
chrt.Select
End If
End If
On Error GoTo 0
Acabo de tener el mismo problema y también encontré que la línea solo se mostraría si pongo datos incorrectos (caracteres en lugar de números). Esto hizo que la línea apareciera, pero al volver a los datos válidos desapareció nuevamente.
Lo que encontré es que si hice doble clic en la línea (apareciendo con datos erróneos), me mostró que estaba en el eje SECUNDARIO por alguna razón. Cambiar eso al eje PRIMARIO resolvió mi problema.
Al cambiar los valores de los datos de origen, el gráfico no se actualizaba en consecuencia. Solo cerré todas las instancias de excel y reinicié, el problema desapareció.
Como probé prácticamente TODAS las soluciones presentadas y como ninguna funcionó en mi caso, también agregaré mis dos centavos aquí. Esperemos que ayude a alguien más.
El consenso sobre este tema parece ser que necesitamos forzar de alguna manera a Excel para volver a dibujar el gráfico, ya que no lo hace cuando debería hacerlo.
Mi solución fue eliminar los datos de X-Axis y reemplazarlos con nada, antes de cambiarlos a lo que quería. Aquí mi código:
With wsReport
.Activate
.ChartObjects(1).Activate
ActiveChart.FullSeriesCollection(1).XValues = "=" ''Kill data here
.Range("A1").Select ''Forwhatever reason a Select statement was needed
.ChartObjects(1).Activate
ActiveChart.FullSeriesCollection(1).XValues = "=tblRef[Secs]"
End With
End Sub
Encontramos una solución que no involucra a VBA: multiplicando algún elemento del rango de datos del gráfico por TODAY()-TODAY()+1
.
Aunque el rango se estaba recalculando sin esto, la naturaleza volátil de TODAY()
alguna manera le da un impulso adicional que activa el recálculo del gráfico.
Este es un error absurdo que dificulta gravemente mi trabajo con Excel.
Sobre la base de los alrededores publicados, llegué a las siguientes acciones como la forma más simple de avanzar ...
Haga clic en el gráfico que desea actualizar: seleccione CTRL-X, CTRL-V para cortar y pegar el gráfico en su lugar ... se verá obligado a actualizar.
Este es un error conocido de Excel ...
La solución mejor y más rápida es Columns.AutoFit
- Trick:
Sub Update_Charts()
Application.ScreenUpdating = False
Temp = ActiveCell.ColumnWidth
ActiveCell.Columns.AutoFit
ActiveCell.ColumnWidth = Temp
Application.ScreenUpdating = True
End Sub
Esto es lo único que he encontrado para actualizar constantemente un gráfico. Corta la causa raíz del problema (supongo): los datos de la serie se almacenan en caché en el gráfico. Al forzar el gráfico para volver a evaluar la serie, estamos borrando el caché.
'' Force the charts to update
Set sht = ActiveSheet
For Each co In sht.ChartObjects
co.Activate
For Each sc In ActiveChart.SeriesCollection
sc.Select
temp = sc.Formula
sc.Formula = "=SERIES(,,1,1)"
sc.Formula = temp
Next sc
Next co
Esto funcionó para mí, corta y vuelve a pegar los gráficos en la hoja de cálculo activa. Basé esto en el código de Jason y en una publicación de blog que encontré en una búsqueda rápida en Google.
Sub RepasteCharts()
Dim StrTemp As String
Dim IntTempTop As Integer
Dim IntTempLeft As Integer
Set sht = ActiveSheet
For Each co In sht.ChartObjects
''Activate the chart
co.Activate
''Grab current position on worksheet
IntTempTop = ActiveChart.Parent.Top
IntTempLeft = ActiveChart.Parent.Left
''Cut and paste
ActiveChart.Parent.Cut
ActiveSheet.Paste
''Reposition to original position
ActiveChart.Parent.Top = IntTempTop
ActiveChart.Parent.Left = IntTempLeft
Next co
End Sub
Esto funciona muy bien para mí: voltea los ejes en todos los gráficos y luego los voltea hacia atrás, lo que hace que se actualicen sin cambiar en absoluto.
''Refresh all charts
For Each mysheet In ActiveWorkbook.Sheets
mysheet.Activate
For Each mychart In ActiveSheet.ChartObjects
mychart.Activate
ActiveChart.PlotArea.Select
ActiveChart.PlotBy = xlRows
ActiveChart.PlotBy = xlColumns
ActiveChart.PlotBy = xlRows
Next
Next
Esto puede parecer extremadamente básico, pero simplemente probé el cálculo manual en la hoja de cálculo donde estaban los gráficos (presionando F9) ¡y funcionó! El código de VBA para eso es simplemente:
Calcular
;)
Hoy tenía un problema similar con un archivo de 2010 con una gran cantidad de fórmulas y varias conexiones de base de datos. El eje del gráfico que no actualizaba los rangos de referencias con columnas ocultas, similares a otros en esta cadena, y las etiquetas mostraban el mes y el año "MMM-YY" de los datos dinámicos. Probé todas las soluciones enumeradas excepto las opciones de VBA que preferiría resolver sin código.
Pude resolver los problemas al encapsular mis fechas (las etiquetas de los ejes) en una fórmula de TEXTO como tal: = TEXTO (A10, "MMM-YY"). Y todo se actualiza inmediatamente cuando los valores cambian. ¡Días felices de nuevo!
Al leer los otros problemas de colaboradores anteriores comencé a pensar que los Gráficos estaban teniendo problemas con el tipo de datos DATE específicamente y, por lo tanto, convertir los valores en texto con la función TEXTO resolvió mi problema. Esperemos que esto te pueda ayudar también. Simplemente cambie el formato dentro de las comillas dobles (segundo argumento de la función TEXTO) para adaptarlo a sus necesidades.
La semana pasada enfrenté el mismo problema con mi trabajo cuando agregué algunos cálculos más a mi hoja. Después de eso, el uso de los botones de opción para seleccionar los datos que se presentarán en los gráficos ya no los actualizó.
La mejor explicación que he podido encontrar hasta ahora es la siguiente: http://support.microsoft.com/kb/243495
Si lo entendí bien, si hay más de 65536 fórmulas que tienen otra celda como referencia en su archivo, Excel comienza a optimizar el cálculo y, en algunos casos, los gráficos ya no se actualizan correctamente.
Si existe una solución alternativa para esto sin usar macros VBA, me complacería escuchar eso (no puedo usarlos porque los archivos deben compartirse a través de SharePoint sin macros VBA).
Lo que funcionó para mí fue usar una macro para insertar / eliminar una columna en la tabla de datos para el gráfico. Esto hará que la tabla actualice la selección de datos.
Encontré que esta es la forma más rápida de solucionarlo.
Luché con este problema, también. Finalmente, resuélvalo volviendo a calcular la hoja que contiene los datos del cuadro DESPUÉS de que la función personalizada se haya recalculado. Entonces, en la hoja 1, tengo una celda que contiene
=ComputeScore()
En el módulo VBA, la función se define como volátil, para garantizar que ComputeScore () se ejecute después de cualquier actualización de la hoja de cálculo.
Function ComputeScore() As Double
Application.Volatile True
. . . do some stuff to get a total . . .
ComputeScore = theTotal
End Function
Luego, en el VBA de la Hoja 1, esto:
Private Sub Worksheet_Calculate()
''Recalculate the charts data page to force the charts to update.
''Otherwise, they don''t update until the next change to a sheet, and so
''chart data is always one update behind the user''s data changes.
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlManual
Sheets("Charts Data").Calculate
Application.Calculation = xlAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Por lo tanto, la hoja denominada Datos de gráficos, que hace referencia a la celda de función personalizada de la Hoja 1, hará un recálculo DESPUÉS de que la función ComputeScore () haya actualizado la celda de la Hoja 1, ya que Worksheet_Calculate () se activa después del recálculo de ComputeScore (). Esta ronda adicional de cálculo de los datos del gráfico hace que el gráfico se actualice ahora, en lugar de más tarde o no se actualice en absoluto. La configuración de EnableEvents y xlManual evita que se produzcan infinitos ciclos de recálculo y otros problemas de eventos.
Me enfrenté al mismo problema. El problema se debe a la restricción en el no. de fórmulas calculadas en tu hoja. Puedes resolverlo de dos maneras:
Manual de recálculo de fuerza:
Press SHEFT + F9
Macro para forzar el recálculo: agregue el siguiente código al final de la función que cambia los datos
Activesheet.Calculate
Encontré la solución: desde las opciones de Excel, asegúrese de cambiar las opciones de cálculo como se muestra a continuación. Se cambió a veces a manual luego de un trabajo pesado en excel.
Me he encontrado con este mismo problema: no estoy seguro de por qué, y cuando sucede, la única forma en que he conseguido actualizar la gráfica es cambiar algo en la definición de la gráfica misma, que se puede hacer fácilmente mediante VBA como en:
Dim C As ChartObject: Set C = Me.ChartObjects("chart name")
C.Chart.ChartTitle.Text = C.Chart.ChartTitle.Text + "1"
Puede haber una mejor respuesta que llegue al fondo del problema, pero pensé que esto podría ayudar. Trabajando en la hoja, haría un Ctrl-X rápido, Ctrl-V en una parte de la tabla (o todo) para forzar la tabla a actualizar.
Mis dos centavos por este problema: tenía un problema similar con un cuadro en un informe de Access 2010. Estaba creando dinámicamente un querydef, configurando eso como el origen de las filas en mi informe y luego tratando de recorrer cada serie y establecer las propiedades de cada serie. Lo que finalmente tuve que hacer fue dividir la creación de querydef y la configuración de la propiedad en subs separados. Además, pongo un
SendKeys ("{DOWN}")
SendKeys ("{UP}")
en la parte inferior de cada uno de los dos subs.
Ok tengo una solución, de verdad ....
Descubrí que el problema de que mis cuadros no se actualizaban primero ocurrió poco después de haber ocultado algunas columnas de datos que alimentaban el cuadro, y verifiqué "mostrar datos ocultos en filas y columnas" en el cuadro de mensajes "Seleccionar origen de datos" del cuadro).
Descubrí que si regresaba al cuadro de mensajes "Seleccionar origen de datos" y desactivaba / volvía a marcar "mostrar datos ocultos en filas y columnas" que el gráfico actualiza.
Programé que inserté lo siguiente en una Macro a la que vinculé un botón, actualiza todos mis gráficos lo suficientemente rápido como para solucionar un error conocido. Este código supone que se puede agregar un gráfico por hoja de cálculo, pero si se desea, se puede agregar otro para la declaración de los gráficos 1 a N:
Sub RefreshCharts()
Application.ScreenUpdating = False
For I = 1 To ActiveWorkbook.Worksheets.Count
Worksheets(I).Activate
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.PlotVisibleOnly = True
ActiveChart.PlotVisibleOnly = False
Next I
Application.ScreenUpdating = True
End Sub
Para mí, la macro no actualizó el eje x para todas las series, sino solo la primera. La solución que encontré fue actualizar el eje x para todas las series y luego se volvió a actualizar (también tenía un código para cambiar el formato del eje x, pero no creo que ese fuera el problema).
ActiveSheet.ChartObjects("Diagram 7").Activate
ActiveChart.Axes(xlCategory).Select
ActiveChart.SeriesCollection(1).XValues = "={""""}"
ActiveChart.SeriesCollection(1).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(2).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(3).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(4).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(5).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(6).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(7).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(8).XValues = "=YYY!$BQ$85:$BQ$8844"
Macro completa
Sub TEST()
''
'' TEST Makro
''
ActiveSheet.ChartObjects("Diagram 7").Activate
ActiveChart.Axes(xlCategory).Select
Selection.TickLabels.NumberFormat = "@"
ActiveSheet.ChartObjects("Diagram 7").Activate
ActiveChart.SeriesCollection(1).XValues = "={""""}"
ActiveChart.SeriesCollection(1).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(2).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(3).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(4).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(5).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(6).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(7).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(8).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).TickMarkSpacing = 730
ActiveChart.Axes(xlCategory).TickLabelSpacing = 730
End Sub
Solo activa la hoja donde está el gráfico:
Sheets(1).Activate
y tu problema desaparece.
Tuve el mismo problema y ninguna de las cosas que mencionaste en la pregunta funcionó hasta que activé la hoja. La respuesta aceptada tampoco funcionó para mí.
Alternativamente puedes hacer:
ActiveCell.Activate
Tengo otro problema de tablas de reafirmación. Cuando se generan los gráficos automáticamente, algunos gráficos aparecen y almacenan el texto en la hoja. Resulta que es un problema actualizar los gráficos generados. Al acercar o alejar, puedo obtener los resultados esperados. Así que publico la solución aquí si le interesa a alguien. Programáticamente, agregué esto después de generar gráficos:
ActiveWindow.Zoom = ActiveWindow.Zoom + 1
ActiveWindow.Zoom = ActiveWindow.Zoom - 1
Tuve el mismo problema con un simple gráfico circular.
Ninguna de las macros funcionó que lo intenté. Nada funcionó en cut
, pasting
, relocating
tabla.
La solución que encontré fue editar el texto del gráfico, eliminar las etiquetas y luego volver a seleccionar las etiquetas. Una vez que volvieron a aparecer, se actualizaron.
Tuve el mismo problema mientras trabajaba en un tutorial (muy frustrante al seguir los pasos y no obtener el resultado esperado).
El tutorial para crear un gráfico circular quería que seleccionara el rango A3:A10
, y que también seleccionara el rango no adyacente E3:E10
. Así lo hice. Tengo el gráfico.
Luego me pidió que cambiara un valor y observara el cambio de porcentaje, luego mirara el gráfico circular y viera la actualización.
No se actualizó.
Miré la fuente de datos para el gráfico circular, y el rango era extraño. Tenía el rango A3:A10
anotado correctamente, pero la referencia de las células E10
repetía varias veces, y tenía todas las células E
enumeradas en un orden aleatorio. Parecía
=SERIES(,(Revenue!$A$3:$A$10,Revenue!$E$3,Revenue!$E$10,Revenue!$E$10,Revenue!$E$10,Revenue!$E$10,Revenue!$E$10,Revenue!$E$9,Revenue!$E$8,Revenue!$E$7,Revenue!$E$6,Revenue!$E$5,Revenue!$E$4),1
He cambiado la fuente de datos para leer:
=SERIES(,Revenue!$A$3:$A$10,Revenue!$E$3:$E$10,1)
Problema resuelto. A veces es una cuestión de limpiar su código para que el procesador de cálculos tenga menos que clasificar.
Tuve el mismo problema que el cartel. Básicamente, estoy ejecutando un panel de control, y tengo un montón de rangos con nombre que se rellenan con valores de retorno de algunas UDF. En el panel de control, hay algunos gráficos circulares con series de datos vinculadas a celdas que contienen estos rangos con nombre (el problema también ocurre si las celdas de destino de la serie de datos contienen las UDF directamente, sin pasar por los rangos con nombre).
Cambio un valor de celda que contiene, por ejemplo, el rango de fechas en el que se basa el tablero de instrumentos, y los rangos con nombre y UDF están obligados a calcular. Sin embargo, los gráficos circulares no se actualizan; por alguna razón, otros tipos de gráficos sí se actualizan. Y, por cierto, estos son objetos de gráficos, no hojas de gráficos. De todos modos, vamos a la solución:
No quería cambiar visiblemente el título de la tabla o algún otro aspecto de la misma, y de todos modos noté que esto no estaba actualizando mis tablas constantemente. A veces, la primera vez que activé el cálculo, las tartas se actualizarían, pero con los cálculos subsiguientes, las tartas no lo harían. Sin embargo, me di cuenta de que cada vez que realizaba un cambio en el código funcionaba mi panel de control. Así:
Solución:
With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
.AddFromString "''test"
.DeleteLines 1
End With
Si está utilizando el módulo de libro de trabajo (no estaba en este caso), simplemente cree un nuevo módulo y haga referencia a eso.
Tuve este problema al generar más de 1000 gráficos a través de VBA
. Generé los gráficos y asigné un rango a sus series. Sin embargo, cuando se recalculó la hoja, los gráficos no se actualizarían, ya que los rangos de datos cambiaron los valores.
Solución -> Desactivé WrapText antes del For ... Next Loop que genera los gráficos y luego lo encendí nuevamente después del loop.
Workbooks(x).Worksheets(x).Cells.WrapText=False
y después...
Workbooks(x).Worksheets(x).Cells.WrapText=True
Esta es una gran solución porque actualiza más de 1000 gráficos a la vez sin recorrerlos todos y cambiando algo individualmente.
Además, no estoy muy seguro de por qué esto funciona; Supongo que cuando WrapText cambia una propiedad del rango de datos hace que se actualice el gráfico, aunque no tengo documentación sobre esto.
Tuve este problema y descubrí que se debía a que dos aplicaciones de Excel se ejecutaban al mismo tiempo. Si cerraba todo y abría solo el archivo, estaba teniendo problemas con los gráficos, donde deberían ser dinámicos. Tal vez esto ayude
Tuve un problema similar: los gráficos no parecían actualizarse. Intenté casi todo en este hilo sin suerte. Finalmente me di cuenta de que los gráficos que estaba copiando y pegando estaban vinculados a los datos de origen, y es por eso que todos mostraban los mismos resultados.
Asegúrese de que está copiando y pegando imágenes antes de pasar por todos los otros movimientos ...