Recorded macro does not work on chart object - vba

I recorded the following macro :
Sheets("Rejets Techniques TGC").Select
ActiveSheet.ChartObjects("Graphique 1").Activate
ActiveChart.Axes(xlCategory).Select
ActiveChart.SeriesCollection(1).Values = "='Données'!$EU$68:$IJ$68"
ActiveChart.SeriesCollection(1).XValues = "='Données'!$EU$1:$IJ$1"
However when I try to lauch it I get this error (translated from french):
Execution error '-2147024809 (80070057)'
There is no element with this name
How can this be? if there was no graph named this way I wouldn't have been able
to record it.
(yes I'm running it from the good sheet)
Thanks.

Here's what it comes down to: Your chart is not an object on the sheet, it is the sheet.
So while you use ActiveSheet.ChartObjects("Graphique 1").Activate to start your code, there are no ChartObjects found in your sheet, because the sheet is the Chart. So here's how you get around it:
Dim CO As Variant
Set CO = ActiveSheet
CO.Axes(xlCategory).Select
CO.SeriesCollection(1).Values = "='Données'!$ET$68:$IJ$68"
CO.SeriesCollection(1).XValues = "='Données'!$ET$1:$IJ$1"
And this should work just fine. I noticed that when I looked at the chart tab, I couldn't get into any cells. This is not abnormal, but it is not the most common way (that I see) to create the chart. To verify, I added a watch on the ActiveSheet and saw that it was indeed a chart (of type Object/Graph2) with all the normal chart methods available to it.
From there, I just plugged in your code, converting to the CO variable (but yours should still work using ActiveSheet across the board), and ran with no errors.
As a side note, using ActiveSheet is not always effective, and it is generally better to explicitly call the sheet, i.e. Set CO = ThisWorkbook.Sheets("Rejets Techniques TGC")

1 - Check if the active sheet is the one that contaisn the chart. Or use the sheet name in code to run it from any sheet.
2 - Check if the good sheet contains the chart with exact "Graphique 1" name. Maybe there's an underline, like "Graphique_1", or no space "Graphique1"...

Related

How to open first sheet and write to the second column using openpyxl?

I'm using an existing excel sheet and the Zillow API to pull the square feet from each house in my neighborhood. I want to open an existing excel workbook, make the first worksheet active, and write the square feet in the second column.
I think the problem is it's not make the worksheet active to write the square feet into the second column. There's quite a bit of code underneath that works when I print to console. I'm trying to use a simple ws.write method but it doesn't recognize ws as a class.
def neighborhood_test():
location = "Address List Cypress Bend.xlsx"
wb_out = Workbook(location)
ws = wb_out.active
print(type(ws))
It should return a worksheet class but returns class 'NoneType' instead.
I figured out what I was doing wrong but now I need to learn how to iterate through it using other xlrd and Zillow API methods. This is the code you need to use an existing excel sheet.
def neighborhood_test():
location = "Address List Cypress Bend.xlsx"
wb_out = load_workbook(location)
worksheet = wb_out.active
print(worksheet.title)
This successfully prints out the first sheet which is Sheet1 for me.

Select data range for a chart from different sheet using VBA (EXCEL)

How can I select data range for a chart from different sheet using VBA? Suppose that data sheet name is data_sheet, chart sheet name is chart_sheet, and my data range is A1:A20. How can I do this in excel? I checked THIS but didn't work for different sheets. Otherwise, I checked THIS but returned this error: Subscript out of range:
With Worksheets("chart_sheet")
ActiveChart.SetSourceData Source:=Worksheets("data_sheet").Range("A1:A20")
End With
Assuming "chart_sheet" is the name of your Chart and "data_sheet" is the name of your Worksheet, I think you want to do the following:
Charts("chart_sheet").SetSourceData Source:=Worksheets("data_sheet").Range("A1:A20")
Your With block was not doing anything useful - the purpose of a With block is to allow you to just type . as a shortcut for something like Worksheets("data_sheet")..
So something like:
With Sheets("chart_sheet")
.SetSourceData Source:=Worksheets("data_sheet").Range("A1:A20")
End With
would work, because the .SetSourceData is an abbreviation of Sheets("chart_sheet").SetSourceData. (Notice also that the Sheets collection contains both Worksheets and Charts objects, so Charts("chart_sheet") and Sheets("chart_sheet") both point to the same thing.)
ActiveChart refers to the currently active chart, just as ActiveSheet returns to the currently sheet. If you don't have a chart active when that piece of code executes, you will get an error.
So the following piece of code would also probably have worked for you:
Sheets("chart_sheet").Activate
ActiveChart.SetSourceData Source:=Worksheets("data_sheet").Range("A1:A20")
as chart_sheet is probably not a worksheet, did you try this ?
with sheets("chart_sheet")

Recorded macro for data labels does not work

So, I'm a novice at using VBA but not so new that I know not to use .select and the likes wherever possible but I will still record macros to find out how to call certain objects. I am working on a large piece of code to do various things before manipulating a chart at the end, it wasn't working so breaking it down into a new spreadsheet I found that some of my lines for manipulating chart labels were giving me an error. I recorded a macro to make sure I hadn't mis-typed anything, but could not fix it, then tried to run the recorded macro, but couldn't get it to work.
Heres the aim of my code:
1. Apply data labels to one point in a series.
2. Delete the label I just applied
(in the final code there will be "if" functions ect)
Here is the macro code, straight from the recorder:
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.SeriesCollection(2).Select
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.SeriesCollection(2).Points(1).Select
ActiveChart.SeriesCollection(2).Points(1).ApplyDataLabels
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.SeriesCollection(2).Points(1).DataLabel.Select
Selection.ShowValue = 0
Selection.ShowCategoryName = -1
' this line ^ gives error 438, object does not support this property or method
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.SeriesCollection(2).Points(1).DataLabel.Select
Selection.Delete
What's also very curious is that sometimes rather than Selection.ShowValue = 0 it will use Selection.ShowValue = False
Anyone know why the recorded code for this is so jumpy? Also if anyone could suggest simpler code for manipulating data labels that would be very useful.
I am using excel 07 on windows 7.
Charts in VBA have always been a pain in the rear for me. That being said, here's some code that tosses a few of the more common objects into variables (so you can break the code on a line and see what's going on in the "locals" window). This will iterate through all of the points on your chart and add a datalabel containing the "Value".
Sub test()
Dim myChart As ChartObject 'A "ChartObject" contains a Chart, in which the "SeriesCollection" resides
Dim chartSeries As Series 'Multiple "Series" can be found in a "SeriesCollection"
Dim scPoint As Point
Set myChart = ActiveSheet.ChartObjects("Chart 1")
Set chartSeries = myChart.Chart.SeriesCollection(1) 'Get the first "Series" in the "SeriesCollection" for this chart
'loop through the points in this Series. As it loops the point will be available in the "scPoint" variable.
For Each scPoint In chartSeries.Points
With scPoint.DataLabel 'Finally the "DataLabel" is part of the "Point"
.ShowValue = True 'Just show the value. There are other options here, just create a new line and start typing with a period to see what other options are available for a "DataLabel"
End With
Next scPoint
'Instead of iterating, if you just want to address a single point's datalabel then:
chartSeries.Points(2).DataLabel.ShowValue
End Sub

Run-time error '-2147188160(80048240) DataType:=ppPasteEnhancedMetafile Error

Seems there is some bug. Can't resolve this problem, all code is running fine and I am able to see the AutoShape is getting copied from Excel file but it is not adding it to PowerPoint. Popping up an error Run-time error '-2147188160(80048240) View.Pastespecial : Invalid Request. The specified data type is unavailable
If Range("H" & i).Value = 1 And Range("B" & i).Value = "FRONT" Then
objPPT.Presentations(1).Slides(9).Select
objPPT.ActiveWindow.View.PasteSpecial DataType:=ppPasteEnhancedMetafile
Your code will be faster and possibly more reliable if you don't rely on selecting anything:
With objPPT.Slides(9).Shapes
Set objShape = .PasteSpecial(ppPasteEnhancedMetafile)(1)
With objShape
' set coordinates and such here
End With
End With
As to why you're getting the error message, try stopping the code after you've put something on the clipbard. Then switch to PowerPoint, use Paste Special to see what paste options are available. If EMF isn't one of them, that's your problem ... you're not putting anything in EMF format on the clipboard.
I had a similar issue, but I found a different solution; it may be specific to what I was doing though.
I setup a program where I would:
(manual) Copy an entire webpage that was a report on several performance metrics
(manual) Pasted it in to excel
Run the program to extract the values I want and then clear contents of the sheet I pasted them on.
Eventually after many tests, it would fail with this same automation error when I tried to access the sheet:
Sheets("PDX Paste").Activate
I was able to activate every other sheet except that particular one, even using the index value instead of the direct name reference. After googling to no success I found out that the copy and paste from the website was also pasting invisible controls. When I found this out I had 1,300+ shapes when I only expected 1 (the button I use to trigger the program). It was actually only apparent when a glitch - presumably due to so much memory being used to store these controls - displayed for a few seconds.
I ran the following code independently and then appended it to the end of my program when I do the cleanup of the data. The code goes through the sheet and deletes any shape that isn't the same type as my button. It would have to be adapted if the shapes you want to delete are the same type as the shapes you want to keep. It also becomes simpler if you don't have any shapes to keep.
Dim wsh As Worksheet
Set wsh = ActiveSheet
Dim i As Integer
For i = wsh.Shapes.Count To 1 Step -1
If wsh.Shapes(i).Type <> wsh.Shapes("UpdateDataButton").Type Then
wsh.Shapes(i).Delete
End If
Next i
I'm not sure this would solve this problem, but hopefully this can help others and prevent loss of time figuring out what may be causing this relatively vague error message.

Chart won't update in Excel (2007)

I have an Excel document (2007) with a chart (Clustered Column) that gets its Data Series from cells containing calculated values
The calculated values never change directly, but only as a result of other cells in the sheet changing
When I change other cells in the sheet, the Data Series cells are recalculated, and show new values - but the Chart based on this Data Series refuses to update automatically
I can get the Chart to update by saving/closing, or toggling one of the settings (such as reversing x/y axis and then putting it back), or by re-selecting the Data Series
Every solution I have found online doesn't work
Yes I have Calculation set to
automatic
Ctrl+Alt+F9 updates everything fine, EXCEPT the chart
I have recreated the chart several times, and on different computers
I have tried VBA scripts like:
Application.Calculate
Application.CalculateFull
Application.CalculateFullRebuild
ActiveWorkbook.RefreshAll
DoEvents
None of these update or refresh the chart
I do notice that if I type over my Data Series, actual numbers instead of calculations, it will update the chart - it's as if Excel doesn't want to recognize changes in the calculations
Has anyone experienced this before or know what I might do to fix the problem?
Thank you
This is the only thing I've found to consistently update a chart. It cuts the root cause of the problem (I assume): the series data is getting cached in the chart. By forcing the chart to re-evaluate the series, we are clearing the cache.
' 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
I have run into this same issue - not sure why, and when it happens the only way I have ever gotten the chart to force update is to change something in the chart definition itself, which can easily be done via VBA as in:
Dim C As ChartObject: Set C = Me.ChartObjects("chart name")
C.Chart.ChartTitle.Text = C.Chart.ChartTitle.Text + "1"
There may be a better answer that gets to the bottom of the problem - but I thought this might help. Working on the sheet I would do a quick Ctrl-X, Ctrl-V on a piece of the chart (or the whole thing) to force the chart to update.
I had this problem while generating 1000+ graphs through VBA. I generated the graphs and assigned a range to their series. However, when the sheet recalculated the graphs wouldn't update as the data ranges changed values.
Solution --> I turned WrapText off before the For...Next Loop that generates the graphs and then turned it on again after the loop.
Workbooks(x).Worksheets(x).Cells.WrapText=False
and after...
Workbooks(x).Worksheets(x).Cells.WrapText=True
This a great solution because it updates 1000+ graphs at once without looping through them all and changing something individually.
Also, I'm not really sure why this works; I suppose when WrapText changes one property of the data range it makes the graph update, although I have no documentation on this.
I had the same problem with a simple pie chart.
None of the macros worked that I tried. Nothing worked on cut, pasting, relocating chart.
The Workaround I found was to edit the chart text, remove the labels, then re-select the labels. Once they re-appeared, they were updated.
This is an absurd bug that is severely hampering my work with Excel.
Based on the work arounds posted I came to the following actions as the simplist way to move forward...
Click on the graph you want update - Select CTRL-X, CTRL-V to cut and paste the graph in place... it will be forced to update.
This works very well for me -- it flips axes on all charts and then flips them back, which causes them to refresh without changing at all.
'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
This is a known Excel bug...
The best and fastest workaround is the Columns.AutoFit - Trick:
Sub Update_Charts()
Application.ScreenUpdating = False
Temp = ActiveCell.ColumnWidth
ActiveCell.Columns.AutoFit
ActiveCell.ColumnWidth = Temp
Application.ScreenUpdating = True
End Sub
I have another problem of refeshing charts. When generating the charts automatically, some charts appear over and cache the text in the sheet. It happens to be a problem of refreshing the generated charts. When I zoom in or zoom out, I can get the expected results. So I post the solution here if it interest someone.
Programmatically, I added this after generating charts :
ActiveWindow.Zoom = ActiveWindow.Zoom + 1
ActiveWindow.Zoom = ActiveWindow.Zoom - 1
Ok I have a solution, really....
I found that the problem with my charts not updating first occurred shortly after I had hidden some data columns feeding the chart, and checked "show data hidden in rows and columns" in the Chart's "Select Data Source" msg box).
I found that if I went back into the "Select Data Source" msg box and unchecked/rechecked the "show data hidden in rows and columns" that the chart refreshes.
Programatically I inserted the following into a Macro that I linked a button to, it refreshes all of my charts quick enough for a workaround to a known bug. This code assumes one chart per worksheet but another for statement for charts 1 to N could be added if desired:
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
I faced the same issue. The issue is due to restriction in no. of calculated formulas in your sheet. you can solved it using two ways:
Manual force re-calculate:
Press SHEFT + F9
Macro to force re-calculate:
add below code to the end of the function which changes the data
Activesheet.Calculate
I found the solution of it:
From excel options make sure to change the calculation options as below. It changed sometimes to manual after heavy work in excel.
We found a solution that doesn't involve VBA: multiplying some element of the chart's data range by TODAY()-TODAY()+1.
Even though the range was recalculating without this, the volatile nature of TODAY() somehow gives it an extra boost that triggers the chart recalc.
This problem is ridiculous! No one's solution worked for me in 2010, but I based mine off of 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")
Simply redefined the Source Data range. If it's a named range, that could conceivably be reasonably clean. I guess the best solution to this is keep trying to modify different chart properties until it refreshes.
I had this problem and found that it was caused by having two excel applications running at the same time. If I closed everything and opened just the file I was having problems with the charts where dynamic like they should be. Maybe this helps
This worked for me, it cuts and re-pastes the charts on the active worksheet. I based this off of Jason's code and a blog post I found in a quick Google search.
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
From Excel 2013 on, there is the Chart.Refreh method (https://msdn.microsoft.com/de-de/library/office/ff198180.aspx) which worked for me:
Dim cht As ChartObject
For Each cht In ThisWorkbook.ActiveSheet.ChartObjects
cht.Chart.Refresh
Next cht
Just spent half a day on this myself.
I have a macro that changes values that are the data for a chart. All worked fine in Excel 2003, but in Excel 2007 the chart seems to lose all connection to its data, although manually changing data values in two column triggered a recalc.
My solution has been to make all charts on the active sheet invisible before the change in data, then make them visible again and call chart refresh for good measure. ( It only seems to be visible charts that have this problem updating ).
This works for me and also handles similar issues with charts as well as chart objects. The refresh may not be necessary - more testing needed.
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
DO MACRO STUFF THAT CHANGES DATA
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
I had the same issue as the poster. Basically I'm running a dashboard, and I have a bunch of named ranges that are populated with return values from some UDFs. On the dashboard, there are some pie charts with data series tied to cells which contain these named ranges (the problem also occurs if the data series target cells contain the UDFs directly, bypassing the named ranges).
I change a cell value which contains, for example, the date range to base the dashboard on, and the named ranges and UDFs are forced to calculate. However, the pie charts do not update--for some reason, other types of charts do. And by the way, these are chart objects, not chart sheets. Anyway, let's cut to the solution:
I didn't want to visibly change the chart title or some other aspect of it, and anyway I noticed this wasn't updating my charts consistently. Sometimes the first time I triggered the calculation the pies would update, but with subsequent calculations the pies would not. I did notice, however, that every time I made a change in the code my dashboard worked. Thus:
Solution:
With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
.AddFromString "'test"
.DeleteLines 1
End With
If you're using the Workbook module (I wasn't in this case), just create a new module and reference that instead.
I faced the same problem with my work last week when I added some more calculation to my sheet. After that, using radio buttons to select data to be presented on graphs did not update the graphs anymore.
The best explanation I have been able to find so far is this:
http://support.microsoft.com/kb/243495
If I understood it right, if there are more than 65536 formulas that have another cell as a reference in your file, Excel starts to optimize the calculation and in some cases graphs don't update correctly anymore.
If there is a workaround for this without using VBA macros, I would be glad to hear that (can't use those as the files need to be shared through SharePoint without VBA macros).
What worked for me was using a macro to insert/remove a column in the data table for the chart. This will cause the chart to update the data selection.
I found this to be the fastest way to fix it.
I had the same problem while working through a tutorial (very frustrating when you follow the steps and don't get the expected result).
The tutorial to create a pie chart wanted me to select range A3:A10, then also select non-adjacent range E3:E10. I did so. I got the chart.
It then asked me to change a value and watch the percentage change, then to look at the pie chart and see the update.
It didn't update.
I looked at the data source for the pie chart, and the range was bizarre. It had the A3:A10 range notated properly, but the E10 cell reference repeated several times, and it had all of the E cells listed in a random order. It looked like
=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
I changed the data source to read:
=SERIES(,Revenue!$A$3:$A$10,Revenue!$E$3:$E$10,1)
Problem solved. Sometimes it's a matter of cleaning up your code so the calculations processor has less to sort through.
I struggled with this problem, too. Finally solved it by recalculating the sheet that has the chart data AFTER the custom function has recalculated. So, in Sheet 1, I have a cell that contains
=ComputeScore()
In the VBA module, the function is defined as Volatile, to ensure that ComputeScore() runs after any updates to the spreadsheet.
Function ComputeScore() As Double
Application.Volatile True
. . . do some stuff to get a total . . .
ComputeScore = theTotal
End Function
Then, in the VBA of Sheet 1, this:
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
So, the sheet named Charts Data, which references the custom function cell of Sheet 1, will do a recalculation AFTER the ComputeScore() function has updated the cell of Sheet 1, since Worksheet_Calculate() fires after the ComputeScore() recalc. This additional round of calculation of the chart data causes the chart to update now, rather than later or not at all. The setting of EnableEvents and xlManual keeps infinite recalc loops and other event problems from occurring.
This might look extremely basic but I just tried Manual Calculating on the spreadsheet where the charts were (by pressing F9) and it worked! Tha VBA code for it is simply:
Calculate
;)
As i tried pretty much ALL the presented solutions and since none worked in my case, I'll add my two cents here as well. Hopefully it helps someone else.
The consensus on this issue seems to be that we need to somehow force excel to redraw the graph since it is not doing it when it should.
My solution was to kill the X-Axis data and replace it with nothing, before changing it to what i wanted. Here my code:
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
My two cents for this problem--I was having a similar issue with a chart on an Access 2010 report. I was dynamically building a querydef, setting that as the rowsource on my report and then trying to loop through each series and set the properties of each series. What I eventually had to do was to break out the querydef creation and the property setting into separate subs. Additionally, I put a
SendKeys ("{DOWN}")
SendKeys ("{UP}")
at the bottom of each of the two subs.
On changing the values of the source data, chart was not getting updated accordingly. Just closed all instances of excel and restarted, problem disappeared.
I had a similar problem - Charts didn't appear to update. I tried just about everything on this thread with no luck. I finally realized that the charts that I was copying and pasting were linked to the source data, and that is why they were all showing the same results.
Be sure you are copying and pasting pictures before you go through all the other motions....
I just had the same problem, and also found that the line would only display if I put in bad data (characters instead of numbers). This caused the line to appear, but changing back to valid data caused it to disappear again.
What I found is that if I double-clicked the line (appearing with bad data), it showed me that it was on the SECONDARY axis for some reason. Changing that to PRIMARY axis solved my problem.
I was having a similar problem today with a 2010 file with a large number of formulas and several database connections. The chart axis that were not updating references ranges with hidden columns, similar to others in this chain, and the labels displayed the month and year "MMM-YY" of the dynamic data. I tried all solutions listed except for the VBA options as I'd prefer to solve without code.
I was able to solve the issues by encapsulating my dates (the axis labels) in a TEXT formula as such: =TEXT(A10,"MMM-YY"). And everything immediately updates when values change. Happy days again!!!
From reading the other contributors issues above I started to think that the Charts were having problems with the DATE data type specifically, and therefore converting the values to text with the TEXT function resolved my issue. Hopefully this may help you as well. Just change the format within the double quotes (second argument of the TEXT function) to suit your needs.
Just activate the sheet where the chart is:
Sheets(1).Activate
and your problem disappears.
I had the same problem and none of the things you mentioned in question worked for me until I just activated sheet. The accepted answer didn't work for me neither.
Alternatively you can make:
ActiveCell.Activate
For me the macro didn't update the x-axis for all series, but only the first one. The solution I found was to update the x-axis for all series and then it refrehsed (also I had code to change the format of the x-axis, but I don't think that that was the problem).
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"
Full macro;
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