我试图将图表中第一个系列的趋势线方程获取到工作表上其他位置的形状文本框 - 但是,只有当我逐行执行代码时,我才能正确填充文本框- 在运行时它没有效果:
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
回来了,一切都无济于事。我被难住了。
EDIT:看来通过放置DoEvents
after .DisplayEquation = True
我能够拥有some我的形状中的一些正确填充,但并非全部。似乎仍然是某种运行时问题。
赏金编辑:我已经用公式跑进数据本身来抓住斜坡,但我仍然不明白为什么我无法获取图表.DataLabel.Text
在运行时。我可以在单步执行时抓住它,而不是在运行时抓住它。它似乎只是采用了上一个系列的斜率并将其放置在形状(或单元格,甚至目的地在哪里)中。DoEvents
放置在不同的位置会产生不同的结果,所以一定发生了一些事情。
更新后可以更好地理解该错误。这在 excel 2016 中对我有用,对源数据(以及斜率)进行了多次更改
我尝试了 myChart.refresh - 没有用。我尝试删除然后重新添加整个趋势线,也不起作用。
这适用于除第一种情况之外的所有情况。第一种情况需要击中两次。与 .select 相同
如果您尝试删除趋势线,即使将其文本分配给文本框后,这也行不通
Option Explicit
Sub main()
Dim ws As Worksheet
Dim txtbox As OLEObject
Dim chartObject As chartObject
Dim myChart As chart
Dim myChartSeriesCol As SeriesCollection
Dim myChartSeries As Series
Dim myChartTrendLines As Trendlines
Dim myTrendLine As Trendline
Set ws = Sheets("MyDataSheet")
Set txtbox = ws.OLEObjects("TextBox1")
For Each chartObject In ws.ChartObjects
Set myChart = chartObject.chart
Set myChartSeriesCol = myChart.SeriesCollection
Set myChartSeries = myChartSeriesCol(1)
Set myChartTrendLines = myChartSeries.Trendlines
With myChartTrendLines
If .Count = 0 Then
.Add
End If
End With
Set myTrendLine = myChartTrendLines.Item(1)
With myTrendLine
.DisplayEquation = True
txtbox.Object.Text = .DataLabel.Text
End With
Next chartObject
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)