【发布时间】:2019-03-26 22:34:56
【问题描述】:
我正在尝试将趋势线方程从图表中的第一个系列获取到放置在工作表其他位置的形状文本框 - 但是,我只能在单步执行代码时让文本框正确填充逐行 - 在运行时它没有效果:
For Each chtObj In ActiveSheet.ChartObjects
Set cht = chtObj.Chart
For Each srs In chtObj.Chart.SeriesCollection
srs.Trendlines(1).DisplayEquation = True 'Display the labels to get the value
ThisWorkbook.Worksheets("MyDataSheet").Shapes(slopetextboxes(k)).TextFrame.Characters.Text = srs.Trendlines(1).DataLabel.Text
srs.Trendlines(1).DisplayEquation = False 'Turn it back off
Exit For
Next srs
k = k + 1 ' for the slope textboxes
Next chtObj
请注意,slopetextboxes 是一个包含约 6 个形状文本框名称的数组。
据我所知,没有办法在不停止显示的情况下获取趋势线数据标签。我已经尝试先将它存储在一个字符串中,DoEvents,然后重新打开Application.ScreenUpdating,一切都无济于事。我被难住了。
编辑:看来,通过将DoEvents 放在.DisplayEquation = True 之后,我可以正确填充一些我的形状,但不是全部。似乎仍然是某种运行时问题。
BOUNTY EDIT:我已经开始用公式抓取数据本身的斜坡,但我仍然不明白为什么我不能抓取图表的@ 987654327@ 在运行时。我可以在单步执行时抓住它,而不是在运行时。它似乎只是采用 PREVIOUS 系列斜率并将其放置在形状中(或单元格,甚至目的地在哪里都没有关系)。 DoEvents 放置在不同的位置会产生不同的结果,所以一定是发生了什么。
【问题讨论】:
-
您可以直接用标准公式而不是图形从数据中得到趋势线方程。
-
@ScottCraner 是否有内置公式可以以 y = mx + b 格式获取它,还是我需要 UDF?
-
您可以轻松连接:
="y = " & SLOPE(Ys,Xs) & "x + " & INTERSECT(Ys,Xs) -
@ScottCraner 这可以工作......如果我无法找到直接从图表数据标签中获取它的方法,我可能会使用它 - 我仍然不明白为什么我不能。
-
2013 年转载。显然是一个错误。我发现的唯一解决方法是在阅读
Text之前添加srs.Trendlines(1).DataLabel.Select。