vba - 检测比 Excel 窗口宽的 Excel 图表中的第一个和最后一个可见点

标签 vba excel charts

我有一个包含烛台图的 Excel 工作表 - 但就本问题而言,它可能是常规的 2D 折线图,或任何具有水平轴的图表。

图表的数据源不是数学函数;相反,它是代表价格的任意数据,从另一个工作表的列中读取。

我的图表比工作表窗口和 Excel 窗口本身宽很多倍。我只需使用工作表的正常水平滚动条即可水平浏览图表,该滚动条会滚动工作表(包括其中的图表)。

我在同一工作表中放置了按钮,以便通过 VBA 代码手动调整图表的垂直比例(Y 轴),因为水平滚动时,可见的新图表值可能需要不同的最小和最大 Y 轴值以最佳方式显示。

我想用自动缩放代替手动缩放:每次滚动后,我需要知道最左边的可见图表点和最右边的图表点是什么 - 即第一个和最后一个可见点。由此我将计算最佳 Y 尺度并将其设置到图表中。

所以我尝试编写 VBA 代码来检测第一个和最后一个可见点。 Chart在我看来, object 似乎没有相关的方法或属性,到目前为止我找不到方法来做到这一点。这就是我的问题。

Chart.AutoScaling属性不会有帮助,因为它会影响整个图表,而我的目标是设置一个仅适用于图表当前可见部分的垂直比例。所以我需要找到图表的第一个和最后一个可见点。

此图表的用户可能拥有与 Excel 2007 一样旧的 Excel 版本,因此适用于旧版本的解决方案将是最佳解决方案,但需要较新 Excel 版本的解决方案也很棒。

最佳答案

我很少发布另一个答案,所以这需要一些思考。

考虑使用仅显示部分数据的动态图表,而不是显示所有数据的静态图表。考虑一下,您可以拥有一个完美适合屏幕的图表,而不是构建跨多个屏幕宽度的图表,但用户可以决定他们想在该图表中看到什么。

然后为用户提供一些控制单元格,他们可以在其中输入图表数据的起点,并为用户提供另一个控件,他们可以在其中确定他们想要在图表中看到多少个蜡烛/条形/点。

利用用户提供的信息,您可以应用已建立的动态图表技术,例如图表范围的命名公式。然后在顶部撒一点 VBA 以确定所选图表范围的最小值和最大值。

如果您想查看该技术的示例,请告诉我,我将添加一个链接。这实际上并不难做到,而且比滚动从窗口左侧和右侧消失的图表更好的用户体验。

编辑:我创建了一个示例文件,您可以使用此 Dropbox link 下载该文件。

您需要为此文件启用宏。

顶部图表显示所有数据。

第 26 行的图表使用动态范围。用户可以操纵 F17 和 F18 来选择起点和要绘制的行数。然后,第 26 行中的图表使用 Excel 默认值来使用一些填充来调整值轴,就像 Excel 所做的那样。

第 42 行中的图表(喜欢这个数字)覆盖了 Exel 默认值,并分别使用 F23 和 F24 中的值作为最小值和最大值。这是通过工作表更改事件宏完成的,只要工作表中的任何单元格发生更改,该宏就会运行。

有无数种方法可以微调和改进这种方法,例如,仅在 F23 或 F24 中的图表参数发生变化时才触发宏,但这不是重点。

重点是,您可以使用动态范围名称来显示图表中的数据选择。无需任何代码,但让 Excel 决定 Y 轴的最小值和最大值应该是多少。就像D26中的图表一样。

如果您想更好地控制 Y 轴的最小值和最大值,请使用 D42 中的代码版本和图表。

很高兴回答问题。

关于vba - 检测比 Excel 窗口宽的 Excel 图表中的第一个和最后一个可见点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44019659/

相关文章:

c# - 图表问题

sql - 哪个更好实践: complex SQL statements or Recordset manipulation in Access VBA?

excel - VBA Dir 在名为 ".."或 Documents.xlsx 的目录中提取 Ghost 文件

vba - 在 VBA 中下载文件并存储它

vba - 如何为空单元格上色

javascript - 带有 chart.js 2.1.4 的可滚动 x 轴

vba - 奇怪的行为 : Variant Set to Object without using Set

excel - 使用公式R1C1内的变量进行抵消

excel - 如何使用 Excel 在 VBA 中禁用 ListView 控件中的箭头键

javascript - 如何使用 javascript 创建饼图