如何使用Excel VBA调整图表大小以适应页面大小?

如何使用Excel VBA调整图表大小以适应页面大小?,vba,excel,charts,Vba,Excel,Charts,我正试图在Excel中调整图表的大小,使其与可打印区域完全匹配,例如,图表应覆盖整个A4页面,但边距区域除外,即它应覆盖(A4高度-上下边距)x(A4宽度-左右边距)。我尝试了下面的代码,但结果表明图表的高度非常接近(A4高度-上下页边距),但仍然不完全相同,而宽度大约比(A4宽度-左右页边距)宽1个单元格 Private子工作表\u Activate() 将sh设置为工作表 如图表所示的暗淡对象形状 设置sh=ActiveSheet 如果sh.ChartObjects.Count为0,则 sh

我正试图在Excel中调整图表的大小,使其与可打印区域完全匹配,例如,图表应覆盖整个A4页面,但边距区域除外,即它应覆盖
(A4高度-上下边距)x(A4宽度-左右边距)
。我尝试了下面的代码,但结果表明图表的高度非常接近(A4高度-上下页边距),但仍然不完全相同,而宽度大约比(A4宽度-左右页边距)宽1个单元格

Private子工作表\u Activate()
将sh设置为工作表
如图表所示的暗淡对象形状
设置sh=ActiveSheet
如果sh.ChartObjects.Count为0,则
sh.ChartObjects.Delete
如果结束
设置objChartShape=sh.Shapes.AddChart.Chart
暗w,h等于长
w=应用。厘米点(21#)A4宽度,单位为厘米
h=应用。厘米(29.7)’A4高度,单位为厘米
w=w-sh.PageSetup.LeftMargin-sh.PageSetup.RightMargin
h=h-sh.PageSetup.TopMargin-sh.PageSetup.BottomMargin
长方形
.Parent.Left=0
.Parent.Top=0
.Parent.Width=w
.Parent.Height=h
以
端接头
激活工作表时,上述代码将创建空图表。您将看到图表不够高,无法到达页脚区域的顶部,并且它太宽,无法容纳在单个页面中


任何帮助都将不胜感激,提前感谢

您可能还需要考虑页眉和页脚边距:

Private Sub Worksheet_Activate()
    Dim sh As Worksheet
    Dim objChartShape As Chart

    Set sh = ActiveSheet
    If sh.ChartObjects.Count <> 0 Then
        sh.ChartObjects.Delete
    End If
    Set objChartShape = sh.Shapes.AddChart.Chart

    Dim w, h As Long
    w = Application.CentimetersToPoints(21#) ' A4 width in cm
    h = Application.CentimetersToPoints(29.7) ' A4 height in cm
    w = w - sh.PageSetup.LeftMargin - sh.PageSetup.RightMargin
    h = h - sh.PageSetup.TopMargin - sh.PageSetup.BottomMargin - sh.PageSetup.HeaderMargin - sh.PageSetup.FooterMargin
    With objChartShape
        .Parent.Left = 0
        .Parent.Top = 0
        .Parent.Width = w
        .Parent.Height = h
    End With
End Sub
Private子工作表\u Activate()
将sh设置为工作表
如图表所示的暗淡对象形状
设置sh=ActiveSheet
如果sh.ChartObjects.Count为0,则
sh.ChartObjects.Delete
如果结束
设置objChartShape=sh.Shapes.AddChart.Chart
暗w,h等于长
w=应用。厘米点(21#)A4宽度,单位为厘米
h=应用。厘米(29.7)’A4高度,单位为厘米
w=w-sh.PageSetup.LeftMargin-sh.PageSetup.RightMargin
h=h-sh.PageSetup.TopMargin-sh.PageSetup.BottomMargin-sh.PageSetup.HeaderMargin-sh.PageSetup.FooterMargin
长方形
.Parent.Left=0
.Parent.Top=0
.Parent.Width=w
.Parent.Height=h
以
端接头

您知道,您可以将图表移动到自己的工作表中,在该工作表中,您可以将大小设置为A4,并在“视图”下设置页边距?干杯,@Siphor。图表是否在自己的表格中对我来说并不重要。问题是如何将其大小设置为A4减去所有边距。我上面的代码试图这样做,但没有起作用。老问题,但这里有。您正在使用嵌入工作表中的图表对象。也许直接使用图表会更好,因为它会自动调整大小以适应页边空白。干杯,@Dave.Gugg,恐怕这行不通。我一开始尝试了完全相同的代码,我意识到页眉边距在顶部边距内,页脚边距在底部边距内。此外,这不会改变图表的宽度,因为图表的宽度也不适合页面大小。
Private Sub Worksheet_Activate()
    Dim sh As Worksheet
    Dim objChartShape As Chart

    Set sh = ActiveSheet
    If sh.ChartObjects.Count <> 0 Then
        sh.ChartObjects.Delete
    End If
    Set objChartShape = sh.Shapes.AddChart.Chart

    Dim w, h As Long
    w = Application.CentimetersToPoints(21#) ' A4 width in cm
    h = Application.CentimetersToPoints(29.7) ' A4 height in cm
    w = w - sh.PageSetup.LeftMargin - sh.PageSetup.RightMargin
    h = h - sh.PageSetup.TopMargin - sh.PageSetup.BottomMargin - sh.PageSetup.HeaderMargin - sh.PageSetup.FooterMargin
    With objChartShape
        .Parent.Left = 0
        .Parent.Top = 0
        .Parent.Width = w
        .Parent.Height = h
    End With
End Sub