View Single Post
  #3   Report Post  
Posted to microsoft.public.excel.charting,microsoft.public.excel.programming
okaizawa okaizawa is offline
external usenet poster
 
Posts: 129
Default square chart insidewidth insideheight

Hi,
try this:

Sub Test()
Dim w As Double, h As Double, x As Double

x = Application.CentimetersToPoints(5)

If ActiveChart Is Nothing Then Exit Sub
If ActiveWindow.Type = xlChartInPlace Then ActiveChart.ShowWindow = True

ActiveChart.ChartArea.Select
ActiveChart.PlotArea.Select
ExecuteExcel4Macro "FORMAT.SIZE(" & x & "," & x & ")"
ExecuteExcel4Macro "FORMAT.SIZE(" & x & "," & x & ")"
ExecuteExcel4Macro "FORMAT.SIZE(" & x & "," & x & ")"

w = ExecuteExcel4Macro("GET.CHART.ITEM(1,5)-GET.CHART.ITEM(1,1)")
h = ExecuteExcel4Macro("GET.CHART.ITEM(2,1)-GET.CHART.ITEM(2,5)")
Debug.Print x, w, h, ActiveChart.PlotArea.InsideWidth, _
ActiveChart.PlotArea.InsideHeight

If ActiveWindow.Type = xlChartAsWindow Then ActiveWindow.Visible = False
End Sub

excel adjusts size of object automatically in a chart.
finally, the size might not become the expected.
in an embedded chart on a worksheet, size depends on the cells.
so, the size of object in the printed worksheet may be different than expected.
in a chart sheet, size seems to be correct.

i have experienced some weird results without 'ActiveWindow.ShowWindow = True'.
if no need, you can delete it.

--
HTH,

okaizawa



Janwillem van Dijk wrote:
How to gain control over dimensions in a chart such that the print
exactly as meant, e.g. with both the X and Y axes 5 cm (or 2" if you like)?

There has bean a thread in 1999 on making square charts that make a few
helpful suggestions which can still be found on google:
http://groups-beta.google.com/group/...effe414a793efd


Slightly adapted a VBA routine that makes the inside of the plot area a
square, looks like "SquareGraphArea" added below. Although it seems not
very elegant to set InsideWidth and InsideHeight this way it works! That
is on Excel 97 SR-2 it works but on Excel 2000 the behaviour is somewhat
unexpected (both under Win2k but on different computers).

The code <.Width = .Width + step increases with by something like 9 to
12 irrespective of the value of step. As can be checked by the macro
"XandYsteps" also added below.

The effect is that the inside area is most times almost a square
seldomly exactly. What is happening? Why this behaviour? How to get
better results?

Kind regards,
Janwillem

emailreplace xyz -- jwe


Sub SquareGraphArea()
'After Bill Koran
'http://groups-beta.google.com/group/microsoft.public.excel.charting/browse_frm/thread/3a14742eebec87b/9b9376ec334e803d?lnk=st&q=excel++plotarea+insidewi dth+koran&rnum=1&hl=en#9b9376ec334e803d

Dim eps As Double, step As Double

Application.ScreenUpdating = False
step = 1#
eps = 1#

With ActiveChart.PlotArea
If Abs(.InsideHeight - .InsideWidth) eps Then
.Height = .Width / 2
If .InsideHeight .InsideWidth Then
.Width = .Height / 2
Do While (.InsideHeight - .InsideWidth eps)
.Width = .Width + step
Loop
Else
.Height = .Width / 2
Do While (.InsideWidth - .InsideHeight eps)
.Height = .Height + step
Loop
End If
End If
End With
Application.ScreenUpdating = True

End Sub

Sub XandYsteps()
Dim Xstep As Double, Ystep As Double, step As Double
Dim line As String

step = InputBox("Step size")
Xstep = ActiveChart.PlotArea.Width
ActiveChart.PlotArea.Width = ActiveChart.PlotArea.Width + step
Xstep = ActiveChart.PlotArea.Width - Xstep

Ystep = ActiveChart.PlotArea.Height
ActiveChart.PlotArea.Height = ActiveChart.PlotArea.Height + step
Ystep = ActiveChart.PlotArea.Height - Ystep

line = "Step=" & step & " Xstep=" & Xstep & " Ystep=" & Ystep
MsgBox (line)
End Sub