我正在创建一些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代码的原始单元。
答案 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。