使用两个范围创建图表,两个相对单元格引用

时间:2014-10-01 18:30:43

标签: excel excel-vba charts range vba

我正在创建一些vba代码来创建图表。我有以下代码:

ActiveChart.SetSourceData Source:=Range( (ActiveCell.Offset(-4, 0), ActiveCell.Offset(-7, 0)), (ActiveCell.Offset(-4, 2), ActiveCell.Offset(-7, 2)))

我有一个3列,8行的单元格区域。我将选择单元格A1,然后运行vba代码。我希望vba代码选择单元格A4:A8 C4:C8(不是B4:B8),然后从中创建一个图表。

这需要相对的原因是因为我在多次运行vba代码时多次移动我运行vba代码的原始单元。

2 个答案:

答案 0 :(得分:0)

您可以对您编写的代码进行一些更改。

首先,如果您选择了单元格ActiveChart,则A1变量将为null,因为您将拥有单元格,而不是图表选中。这可以通过在代码中选择图表来解决。

其次,ActiveCell变量将随着单元格的变化而变化。您需要缓存该值或更新偏移量以匹配范围中前一个单元格的偏移量。我会推荐前一个选项。

最后,看起来偏移量从A1的起点偏离1。

我做了一些更改,子显示如下。请注意,此代码中的图表名称为MyChart,但可以轻松更改为工作表中指定的任何内容。

Sub UpdateChart()
    Dim cell As Range
    Set cell = ActiveCell

    ActiveSheet.ChartObjects("MyChart").Activate
    ActiveChart.SetSourceData Source:=Range(Range(cell.Offset(3, 0), cell.Offset(6, 0)), Range(cell.Offset(3, 2), cell.Offset(6, 2)))
End Sub

答案 1 :(得分:0)

这是我的版本:

Sub ject()
    Dim ws As Worksheet, ac As Range, ch As Chart
    Set ws = ActiveSheet: Set ac = ActiveCell
    With ws
        On Error Resume Next
        .ChartObjects("newchart").Delete
        On Error GoTo 0
        .Range(ac.Offset(3, 0).Resize(4).Address & "," & _
            ac.Offset(3, 2).Resize(4).Address).Select
        .Shapes.AddChart(xlColumnStacked, ac.Offset(0, 4).Left, _
            ac.Offset(0, 4).Top, 300, 250).Name = "newchart"
    End With
End Sub

这将从当前所选工作表上当前选定的单元格中创建 ColumnStacked条形图。 该图表位于活动单元格的第5个单元格上。 HTH。