修改ChartSpace轴最小值

时间:2013-12-11 10:12:12

标签: excel vba charts

我正在尝试将ChartSpace图表的X和Y轴边界设置为我的数据宽度。但是,以下代码不起作用;

With ChartControl
    .DataSource = SpdShtCtrl
    With .Charts.Add
        .Type = chChartTypeScatterLine

        With .Axes(chCategoryAxis)
            .Left = WorksheetFunction.Min(SpdShtCtrl.Range("XValues"))
            .Right = WorksheetFunction.Max(SpdShtCtrl.Range("XValues"))
        End With

        With .Axes(chValueAxis)
            .Bottom = WorksheetFunction.Min(SpdShtCtrl.Range("YValues"))
            .Top = WorksheetFunction.Max(SpdShtCtrl.Range("YValues"))
        End With

        '...

    End With
End With

.Right方法失败,错误“参数数量错误或属性分配无效”。我理解,因为在检查时,.Right.Bottom属性是只读的,而.Left.Top属性是读/写的。但是,我不明白为什么会这样。

评论.Right.Bottom调用编译正常,但是在调用.Left方法时出现运行时错误,该方法显示“这是一个不适当的时间来更改布局。” / p>

为ChartSpace图表设置X和Y轴边界的正确方法是什么?我似乎无法在任何地方找到相关信息。

1 个答案:

答案 0 :(得分:0)

错误的方法

事实证明我正在咆哮错误的树。设置.Left属性会移动屏幕上的轴,而不会更改绘制的最小数据值!如果有人想知道,我已经包含了.Left属性的正确用法。

我通过Left property helpAfterLayout event help的组合找到了答案。它涉及在ChartSpace

上设置以下属性
.AllowLayoutEvents = True

AfterLayout;

上为ChartSpace事件创建事件处理程序
Private Sub ChartControl_AfterLayout(ByVal drawObject As OWC11.ChChartDraw)
    ChartControl.Charts(0).Axes(chCategoryAxis).Left = _
        WorksheetFunction.Min(SpdShtCtrl.Range("XValues"))
End Sub

工作方法

我真正想做的是在系列中设置.Scalings属性,即

With ChartControl.SeriesCollection(0)
    .Scalings(chDimXValues).Minimum = bla
    .Scalings(chDimXValues).Maximum = bla
    .Scalings(chDimYValues).Minimum = bla
    .Scalings(chDimYValues).Maximum = bla
End With