Jul 10 2021 02:58 AM
I have written a macro that looks like this:
Sub CopyCharts()
Dim Sheet_Count As Integer
Dim Target_Sheet As Worksheet
Dim i As Integer
Sheet_Count = ActiveWorkbook.Sheets.Count
Target_Sheet = ActiveWorkbook.Sheets(1)
For i = 2 To Sheet_Count
For Each Chart In ActiveWorkbook.Sheets(i).ChartObjects
Chart.Copy
ChartSheet.Paste ("D4")
Next i
End Sub
Its purpose is to copy all the charts from sheet 2 onwards to D4 on sheet 1.
It does so through these steps:
1. Get the sheet count of the active workbook
2. Set the copy target sheet to the first sheet
3. Loop through each but the first sheet
4. Inside that loop, copy all the chart objects to space D4 on the first sheet
When I try to run it, I get an error saying
Compile error:
Invalid Next control variable reference
The only place I use the Next instruction in is at the end of the For loop, which is how you're supposed to use it?
I'm new to both VBA and Office macros, so please forgive me if I'm making an obvious mistake
Jul 10 2021 03:13 AM
Solution1) You have two For loops, but only one Next.
2) You declare a variable Target_Sheet.
3) You don't use the keyword Set to assign Target_Sheet
3) You try to paste to the undefined variable ChartSheet
4) You try to paste to a string instead of a range.
5) Chart is not a good name for a variable, since it is the name of a built-in object.
Here is a working version:
Sub CopyCharts()
Dim Sheet_Count As Integer
Dim Target_Sheet As Worksheet
Dim i As Integer
Dim Cht As ChartObject
Sheet_Count = ActiveWorkbook.Sheets.Count
Set Target_Sheet = ActiveWorkbook.Sheets(1)
For i = 2 To Sheet_Count
For Each Cht In ActiveWorkbook.Sheets(i).ChartObjects
Cht.Copy
Target_Sheet.Paste Target_Sheet.Range("D4")
Next Cht
Next i
End Sub
6) All charts will be pasted more or less on top of each other
Jul 10 2021 03:55 AM
Apr 20 2022 01:39 PM
Apr 20 2022 02:34 PM
Which charts do you want to copy to which cell?
Apr 20 2022 02:47 PM - edited Apr 21 2022 09:13 AM
4 different charts on 4 different sheets. In my sub, i have created a new sheet to store the charts.
All the cell references I've made below are on the new sheet to store the charts in.
I want:
Sheet 1's chart I want to be in A1
Sheet 2's chart I want to be in A20
Sheet 3's Chart I want to be in J1
Sheet 4's Chart I want to be in J20
Apr 20 2022 03:18 PM
Replace the lines
For i = 2 To sheetCount
For Each Cht In ActiveWorkbook.Sheets(i).ChartObjects
Cht.Copy
targetSheet.Paste targetSheet.Range("A1")
Next Cht
Next i
with
Dim arr
arr = Array("A1", "A20", "J1", "J20")
For i = 1 To 4
Set Cht = Sheets(targetSheet.Index + i).ChartObjects(1)
Cht.Copy
targetSheet.Paste targetSheet.Range(arr(i - 1))
Next i
Apr 20 2022 03:25 PM
Aug 08 2022 02:13 PM
Aug 08 2022 02:28 PM
Change the line
Set Target_Sheet = ActiveWorkbook.Sheets(1)
to
Set Target_Sheet = Workbooks.Add(xlWBATWorksheet).Sheets(1)
Aug 08 2022 02:36 PM
Aug 08 2022 03:07 PM
Aug 09 2022 07:59 AM
Sub CopyCharts()
Dim Sheet_Count As Integer
Dim Target_Sheet As Worksheet
Dim i As Integer
Dim Cht As ChartObject
Sheet_Count = ActiveWorkbook.Sheets.Count
Set Target_Sheet = Workbooks.Add(xlWBATWorksheet).Sheets(1)
For i = 1 To Sheet_Count
For Each Cht In ActiveWorkbook.Sheets(i).ChartObjects
Cht.Copy
Target_Sheet.Paste Target_Sheet.Range("A1")
Next Cht
Next i
End Sub
It's telling me that I need to debug this line:
For Each Cht In ActiveWorkbook.Sheets(i).ChartObjects
Not sure how to copy paste the code like you've been doing. But my code is long, I've written code that allows me to pull multiple files of data and organize them into separate sheets. And then another code that allows me to run macros on all of the sheets that further organizes and creates graphs of the data. And then I just want to be able to take all of the graphs from each sheet and paste them into a new separate workbook. @HansVogelaar
Aug 09 2022 08:48 AM
Aug 09 2022 08:57 AM
Aug 09 2022 12:28 PM
Try this version:
Sub CopyCharts()
Dim Sheet_Count As Integer
Dim Target_Sheet As Worksheet
Dim i As Integer
Dim Cht As ChartObject
Sheet_Count = ThisWorkbook.Sheets.Count
Set Target_Sheet = Workbooks.Add(xlWBATWorksheet).Sheets(1)
For i = 1 To Sheet_Count
For Each Cht In ThisWorkbook.Sheets(i).ChartObjects
Cht.Copy
Target_Sheet.Paste Target_Sheet.Range("A1")
Next Cht
Next i
End Sub
Aug 09 2022 12:48 PM
Oct 26 2022 03:44 PM - edited Oct 26 2022 03:53 PM
@HansVogelaarIn step 6) is there a way to have the charts paste into their own cell verse pasting on top of each other?
Oct 26 2022 04:21 PM
For example:
Sub CopyCharts()
Dim Sheet_Count As Integer
Dim Target_Sheet As Worksheet
Dim i As Integer
Dim Cht As ChartObject
Sheet_Count = ActiveWorkbook.Sheets.Count
Set Target_Sheet = ActiveWorkbook.Sheets(1)
For i = 2 To Sheet_Count
For Each Cht In ActiveWorkbook.Sheets(i).ChartObjects
Cht.Copy
Target_Sheet.Paste Target_Sheet.Range("D" & i)
Next Cht
Next i
End Sub
Oct 26 2022 04:47 PM
Jul 10 2021 03:13 AM
Solution1) You have two For loops, but only one Next.
2) You declare a variable Target_Sheet.
3) You don't use the keyword Set to assign Target_Sheet
3) You try to paste to the undefined variable ChartSheet
4) You try to paste to a string instead of a range.
5) Chart is not a good name for a variable, since it is the name of a built-in object.
Here is a working version:
Sub CopyCharts()
Dim Sheet_Count As Integer
Dim Target_Sheet As Worksheet
Dim i As Integer
Dim Cht As ChartObject
Sheet_Count = ActiveWorkbook.Sheets.Count
Set Target_Sheet = ActiveWorkbook.Sheets(1)
For i = 2 To Sheet_Count
For Each Cht In ActiveWorkbook.Sheets(i).ChartObjects
Cht.Copy
Target_Sheet.Paste Target_Sheet.Range("D4")
Next Cht
Next i
End Sub
6) All charts will be pasted more or less on top of each other