excel - 如何使用来自不同工作表的源创建图表
问题描述
在来问之前我在网上搜索了很多,我找到的答案并没有解决问题。“数据”工作表与“报告”工作表位于同一工作簿中。
这是我的代码中对这个问题很重要的部分:
Private Function CreateChart(ByVal DataRow As Integer, ByVal DataCol As Integer)
Dim ChartRowOffset As Integer
Charts.Add
ActiveChart.ChartType = xlPie
ActiveChart.SetSourceData Source:=Sheets("Data").Range(Cells(2, DataCol), Cells(DataRow - 1, DataCol + 1)), PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Report"
ActiveChart.HasTitle = True
ActiveChart.ChartTitle.Select
ActiveChart.ChartTitle.Text = ThisWorkbook.Sheets("Data").Cells(1, DataCol).Value
If DataCol > 1 Then
ChartRowOffset = (DataCol - 1) * 2
Else
ChartRowOffset = 2
End If
With ActiveChart.Parent
.Top = ThisWorkbook.Sheets("Report").Cells(ChartRowOffset, 1).Top
.Left = ThisWorkbook.Sheets("Report").Cells(ChartRowOffset, 1).Left
End With
End Function
当我尝试从该行的不同工作表中选择源时,我收到错误代码 1004“应用程序定义或对象定义错误”:
ActiveChart.SetSourceData Source:=Sheets("Data").Range(Cells(2, DataCol), Cells(DataRow - 1, DataCol + 1)), PlotBy:=xlColumns
如果我在没有 Sheets("Data") 的情况下执行此操作,它不会出错并创建图表,但它会从“Reports”工作表中选择单元格,而不是我需要的 Worksheet。我尝试选择“数据”工作表,激活它,到目前为止没有任何效果。
任何帮助,将不胜感激。
解决方案
请尝试以下方法来修复引用样式问题 -
ActiveChart.SetSourceData Source:= _
Sheets("Data").Range(Cells(2, DataCol).Address, Cells(DataRow - 1, DataCol + _
1).Address), PlotBy:=xlColumns
臭名昭著的错误:1004会因为这样的事情而困扰你至死。此外,如果可以的话,如果您在适用的地方使用With语句,您的代码会更快、更短、更易于阅读。
前任:
With ActiveChart
.Location Where:=xlLocationAsObject, Name:="Report"
.HasTitle = True
.ChartTitle.Select
.ChartTitle.Text = ThisWorkbook.Sheets("Data").Cells(1, DataCol).Value
End WIth
-******更新*******-
测试后,我发现我必须重新设置变量......对我来说似乎很疯狂,但是,测试并为我工作:
Private Function CreateChart()
Dim cht As Chart
Dim rng As Range
Set rng = ThisWorkbook.Worksheets("Sheet1").UsedRange
Set cht = Charts.Add
With cht
.SetSourceData Source:=rng, PlotBy:=xlColumns
.ChartType = xlPie
.Location Where:=xlLocationAsObject, Name:="Sheet1"
End With
Set cht = ActiveChart
With cht
.HasTitle = True
.ChartTitle.Text = ThisWorkbook.Sheets(1).Name
End With
End Function
丹尼,
推荐阅读
- docker - docker 需要虚拟化
- java - 如何在 php 上读取 Java 提交的数据?
- python - FFT 图像的 IFFT 导致原始图像出现奇怪的上下重叠
- python - Python - 将联系人保存到通讯录并打印通讯录
- node.js - NodeJS rhea AMQP 客户端的故障转移
- javascript - 在 Kattis 挑战中获得输入 - readline js
- leaflet - 传单图例出现在选择覆盖功能之前
- symfony - Symfony - 上传文件将我发送到 _wtd url
- python - 从图形中识别不同的回归(线性、多项式)并相应地拟合回归模型
- javascript - Highcharts 直方图剂量显示正确的结果