excel - VBA - 动态图表
问题描述
我有一段非常有用的 VBA 代码,它根据用户数据集填充的数据行数创建动态图表。
With Sheets("DynamicCharts")
LastRow = .Range("R" & .Rows.Count).END(xlUp).row
Set Rng1 = .Range("R2:R" & LastRow & ", S2:S" & LastRow)
ShName = .Name
End With
With Sheets("Property Details").ChartObjects("Year").Chart
.SetSourceData Source:=Rng1
End With
但是我注意到,当我只有一行的值时(见下文):
我的一段代码没有读取类别名称。它使用 1 而不是名称填充图表(见下文)
我怀疑它是如何设置范围的:
Set Rng1 = .Range("R2:R" & LastRow & ", S2:S" & LastRow)
并且它不喜欢图表中的“R2:R2”,但我不确定您如何在
谢谢
解决方案
问题 - 为什么会这样?
如果您设置数据源,.SetSourceData Source:=
实际上让 Excel 猜测该范围内的数据是如何排列的。如果在那个范围内不止一行,那么 Excel 可以分析和猜测得很好。
但是只有一行数据 Excel 无法正确确定图表标题是哪个文本数据以及哪个行/类别名称。
解决它...</h3>
这意味着您的定义必须更加精确。
例如,如果您包含第 1 行,则猜测会更好一些:
Set Rng1 = .Range("R1:R" & LastRow & ", S1:S" & LastRow)
但随后图表标题和类别名称翻转为 Excel 的默认值,结果为:
图 1:图表标题和类别名称翻转。Excel 的猜测不是预期的结果。
如果您更精确并准确地告诉 Excel 哪些数据在该范围内,那么您将获得精确的结果:
With Sheets("Property Details").ChartObjects("Year").Chart
.SetSourceData Source:=Rng1
.FullSeriesCollection(1).Name = "='" & ShName & "'!$S$1" '≙ "=DynamicCharts!$S$1"
.FullSeriesCollection(1).Values = "='" & ShName & "'!$S$2:$S$" & LastRow '≙ "=DynamicCharts!$S$2:$S$" & LastRow
.FullSeriesCollection(1).XValues = "='" & ShName & "'!$R$2:$R$" & LastRow '≙ "=DynamicCharts!$R$2:$R$" & LastRow
End With
图 2:通过精确定义哪些数据在哪里,Excel 无需猜测即可获得所需的结果。
结论
如果您没有给出确切的指示,Excel 会非常有耐心。所以它会猜测并给出一个结果(这可能不是你所期望的)。但是你给出的指令越精确,Excel 的猜测就越少,结果就越精确和可靠。
最佳实践:始终尽可能精确以避免意外:)
推荐阅读
- python-3.x - 将过滤后的 RDD 添加到另一个 RDD
- sql-server - 数据库从 MDB 导入到 SQL 数据类型问题
- javascript - 使数据点平稳过渡?
- python - 如何通过熊猫中不同的列值重组每日时间序列?
- c# - 未为 C# 项目设置 OutputPath 属性
- parse-platform - 将 Parse Server 从 v3 升级到 v4 会触发错误“GraphQL:必须提供源”
- java - 如何使用 Gradle 为 Selenium TestNG 项目创建具有依赖关系的可执行 JAR?
- python - 为什么我需要从我的 matplotlib Axes 中删除两次补丁才能将它们全部删除?
- docker - 无法在 Docker 中运行映像
- java - 使用条纹 android + firebase 制作连接用户