Roderick_E
Well-known Member
- Joined
- Oct 13, 2007
- Messages
- 2,051
So I've got a vba macro to size and position up to 4 pagebreaks of charts. It can handle 1-4 and 6 charts on each pagebreak, sizing and positioning equally.
However, I want to make it more dynamic so I don't have to keep pasting in the configurations for the next pagebreak. Any ideas? Thanks
However, I want to make it more dynamic so I don't have to keep pasting in the configurations for the next pagebreak. Any ideas? Thanks
Code:
Public Sub Count_Charts_On_Each_Page()
Dim page As Long
Dim chartObj As ChartObject
Dim HPageBreakStartRow As Long
Dim numChartsOnPage As Long
Dim pagecharts As Variant
ReDim pagecharts(0 To 0)
baseleft = 232
basetop = 4
basemid = 280
basewidth = 450
baseheight = 274
HPageBreakStartRow = 1
With ActiveWorkbook.ActiveSheet
For page = 1 To .HPageBreaks.Count
numChartsOnPage = 0
'Debug.Print page, HpageBreakStartRow, .HPageBreaks(page).Location.Row
For Each chartObj In .ChartObjects
'Debug.Print chartObj.BottomRightCell.Address
If chartObj.TopLeftCell.Row >= HPageBreakStartRow And chartObj.BottomRightCell.Row < .HPageBreaks(page).Location.Row Then
numChartsOnPage = numChartsOnPage + 1
'MsgBox chartObj.Name & " is on page " & page
pagecharts(UBound(pagecharts)) = chartObj.Name & "=" & Right("0" & page, 2)
ReDim Preserve pagecharts(UBound(pagecharts) + 1) 'Allocate next element
End If
Next
'MsgBox numChartsOnPage & " charts on page " & page
HPageBreakStartRow = .HPageBreaks(page).Location.Row
Next
End With
On Error Resume Next 'instead of checking if array was used
ReDim Preserve pagecharts(LBound(pagecharts) To UBound(pagecharts) - 1) 'Deallocate the last, unused element
Resume Next
For Each element In pagecharts
If InStr(element, "=01") Then
cnt1 = cnt1 + 1
End If
If InStr(element, "=02") Then
cnt2 = cnt2 + 1
End If
If InStr(element, "=03") Then
cnt3 = cnt3 + 1
End If
If InStr(element, "=04") Then
cnt4 = cnt4 + 1
End If
Next
For Each element In pagecharts
'PAGE 1
'1 chart
If Right(element, 3) = "=01" Then
If cnt1 = 1 And Right(element, 3) = "=01" Then
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Left = baseleft
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Width = basewidth * 2
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Top = basetop
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Height = baseheight * 2
End If
'2 charts
If cnt1 = 2 And Right(element, 3) = "=01" Then
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Left = baseleft
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Width = basewidth * 2
If hit1 = 0 Then
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Top = basetop
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Height = baseheight
End If
If hit1 = 1 Then
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Top = basemid
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Height = baseheight
End If
End If
'3 charts
If cnt1 = 3 And Right(element, 3) = "=01" Then
If hit1 = 0 Then
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Left = baseleft
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Width = basewidth * 2
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Top = basetop
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Height = baseheight
End If
If hit1 = 1 Then
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Left = baseleft
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Top = basemid
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Height = baseheight
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Width = basewidth
End If
If hit1 = 2 Then
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Left = baseleft + basewidth + 3
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Top = basemid
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Height = baseheight
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Width = basewidth
End If
End If
'4 charts
If cnt1 = 4 And Right(element, 3) = "=01" Then
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Width = basewidth
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Height = baseheight
If hit1 = 0 Or hit1 = 1 Then
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Top = basetop
End If
If hit1 = 0 Or hit1 = 2 Then
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Left = baseleft
End If
If hit1 = 1 Or hit1 = 3 Then
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Left = baseleft + basewidth + 3
End If
If hit1 = 2 Or hit1 = 3 Then
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Top = basemid
End If
End If
'6 charts
If cnt1 = 6 And Right(element, 3) = "=01" Then
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Width = (basewidth / 3) + 150
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Height = baseheight
If hit1 <= 2 Then
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Top = basetop
End If
If hit1 = 0 Or hit1 = 3 Then
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Left = baseleft
End If
If hit1 = 1 Or hit1 = 4 Then
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Left = baseleft + (basewidth / 3) + 153
End If
If hit1 = 2 Or hit1 = 5 Then
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Left = baseleft + (basewidth / 3) + 455
End If
If hit1 >= 3 Then
ActiveSheet.ChartObjects(Replace(element, "=01", "")).Top = basemid
End If
End If
hit1 = hit1 + 1
End If
'PAGE 2
'1 chart
If Right(element, 3) = "=02" Then
'extended
basetop = 608
basemid = 885
If cnt2 = 1 And Right(element, 3) = "=02" Then
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Left = baseleft
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Width = basewidth * 2
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Top = basetop
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Height = baseheight * 2
End If
'2 charts
If cnt2 = 2 And Right(element, 3) = "=02" Then
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Left = baseleft
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Width = basewidth * 2
If hit2 = 0 Then
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Top = basetop
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Height = baseheight
End If
If hit2 = 1 Then
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Top = basemid
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Height = baseheight
End If
End If
'3 charts
If cnt2 = 3 And Right(element, 3) = "=02" Then
If hit2 = 0 Then
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Left = baseleft
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Width = basewidth * 2
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Top = basetop
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Height = baseheight
End If
If hit2 = 1 Then
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Left = baseleft
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Top = basemid
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Height = baseheight
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Width = basewidth
End If
If hit2 = 2 Then
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Left = baseleft + basewidth + 3
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Top = basemid
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Height = baseheight
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Width = basewidth
End If
End If
'4 charts
If cnt2 = 4 And Right(element, 3) = "=02" Then
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Width = basewidth
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Height = baseheight
If hit2 = 0 Or hit2 = 1 Then
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Top = basetop
End If
If hit2 = 0 Or hit2 = 2 Then
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Left = baseleft
End If
If hit2 = 1 Or hit2 = 3 Then
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Left = baseleft + basewidth + 3
End If
If hit2 = 2 Or hit2 = 3 Then
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Top = basemid
End If
End If
'6 charts
If cnt2 = 6 And Right(element, 3) = "=02" Then
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Width = (basewidth / 3) + 150
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Height = baseheight
If hit2 <= 2 Then
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Top = basetop
End If
If hit2 = 0 Or hit2 = 3 Then
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Left = baseleft
End If
If hit2 = 1 Or hit2 = 4 Then
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Left = baseleft + (basewidth / 3) + 153
End If
If hit2 = 2 Or hit2 = 5 Then
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Left = baseleft + (basewidth / 3) + 455
End If
If hit2 >= 3 Then
ActiveSheet.ChartObjects(Replace(element, "=02", "")).Top = basemid
End If
End If
hit2 = hit2 + 1
End If
'PAGE 3
'1 chart
If Right(element, 3) = "=03" Then
'extended
basetop = 1216
basemid = 1494
If cnt3 = 1 And Right(element, 3) = "=03" Then
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Left = baseleft
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Width = basewidth * 2
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Top = basetop
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Height = baseheight * 2
End If
'2 charts
If cnt3 = 2 And Right(element, 3) = "=03" Then
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Left = baseleft
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Width = basewidth * 2
If hit3 = 0 Then
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Top = basetop
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Height = baseheight
End If
If hit3 = 1 Then
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Top = basemid
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Height = baseheight
End If
End If
'3 charts
If cnt3 = 3 And Right(element, 3) = "=03" Then
If hit3 = 0 Then
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Left = baseleft
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Width = basewidth * 2
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Top = basetop
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Height = baseheight
End If
If hit3 = 1 Then
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Left = baseleft
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Top = basemid
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Height = baseheight
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Width = basewidth
End If
If hit3 = 2 Then
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Left = baseleft + basewidth + 3
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Top = basemid
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Height = baseheight
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Width = basewidth
End If
End If
'4 charts
If cnt3 = 4 And Right(element, 3) = "=03" Then
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Width = basewidth
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Height = baseheight
If hit3 = 0 Or hit3 = 1 Then
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Top = basetop
End If
If hit3 = 0 Or hit3 = 2 Then
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Left = baseleft
End If
If hit3 = 1 Or hit3 = 3 Then
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Left = baseleft + basewidth + 3
End If
If hit3 = 2 Or hit3 = 3 Then
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Top = basemid
End If
End If
'6 charts
If cnt3 = 6 And Right(element, 3) = "=03" Then
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Width = (basewidth / 3) + 150
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Height = baseheight
If hit3 <= 2 Then
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Top = basetop
End If
If hit3 = 0 Or hit3 = 3 Then
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Left = baseleft
End If
If hit3 = 1 Or hit3 = 4 Then
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Left = baseleft + (basewidth / 3) + 153
End If
If hit3 = 2 Or hit3 = 5 Then
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Left = baseleft + (basewidth / 3) + 455
End If
If hit3 >= 3 Then
ActiveSheet.ChartObjects(Replace(element, "=03", "")).Top = basemid
End If
End If
hit3 = hit3 + 1
End If
'PAGE 4
'1 chart
If Right(element, 3) = "=04" Then
'extended
basetop = 1821
basemid = 2098
If cnt4 = 1 And Right(element, 3) = "=04" Then
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Left = baseleft
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Width = basewidth * 2
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Top = basetop
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Height = baseheight * 2
End If
'2 charts
If cnt4 = 2 And Right(element, 3) = "=04" Then
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Left = baseleft
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Width = basewidth * 2
If hit4 = 0 Then
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Top = basetop
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Height = baseheight
End If
If hit4 = 1 Then
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Top = basemid
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Height = baseheight
End If
End If
'3 charts
If cnt4 = 3 And Right(element, 3) = "=04" Then
If hit4 = 0 Then
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Left = baseleft
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Width = basewidth * 2
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Top = basetop
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Height = baseheight
End If
If hit4 = 1 Then
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Left = baseleft
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Top = basemid
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Height = baseheight
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Width = basewidth
End If
If hit4 = 2 Then
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Left = baseleft + basewidth + 3
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Top = basemid
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Height = baseheight
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Width = basewidth
End If
End If
'4 charts
If cnt4 = 4 And Right(element, 3) = "=04" Then
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Width = basewidth
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Height = baseheight
If hit4 = 0 Or hit4 = 1 Then
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Top = basetop
End If
If hit4 = 0 Or hit4 = 2 Then
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Left = baseleft
End If
If hit4 = 1 Or hit4 = 3 Then
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Left = baseleft + basewidth + 3
End If
If hit4 = 2 Or hit4 = 3 Then
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Top = basemid
End If
End If
'6 charts
If cnt4 = 6 And Right(element, 3) = "=04" Then
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Width = (basewidth / 3) + 150
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Height = baseheight
If hit4 <= 2 Then
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Top = basetop
End If
If hit4 = 0 Or hit4 = 3 Then
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Left = baseleft
End If
If hit4 = 1 Or hit4 = 4 Then
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Left = baseleft + (basewidth / 3) + 153
End If
If hit4 = 2 Or hit4 = 5 Then
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Left = baseleft + (basewidth / 3) + 455
End If
If hit4 >= 3 Then
ActiveSheet.ChartObjects(Replace(element, "=04", "")).Top = basemid
End If
End If
hit4 = hit4 + 1
End If
Next
MsgBox "Resizing and Repositioning done", vbInformation, "Complete"
End Sub