5

我想知道如何为我正在处理的宏将文本框附加到 Excel 图表中的点或线。我一直在使用.AddTextbox诸如

.Shapes.AddTextbox(msoTextOrientationHorizontal, 150, 250, 100, 15) _
      .TextFrame.Characters.Text = "Temperature"

但是我必须手动将文本框拖到它所代表的图表上的线条上,因为方向是图表而不是线条。有没有办法将线/点转换为可以用作变量的图表方向?或其他方式?可能使用 datalabel 函数,但我希望能够自定义其中一个轴位置。谢谢

4

2 回答 2

4

要解决您的问题,您需要获取两个对象的左侧和顶部位置:

  1. 图表本身,相对于工作表范围区域的左上角设置哪个位置
  2. 相对于图表左上角设置位置的系列点

将两个结果与以下代码结合起来(根据您的情况进行固定参数所需的更改,使用循环可能会更加动态)

Sub Add_Text_to_point()

    Dim tmpCHR As ChartObject
    Set tmpCHR = Sheet1.ChartObjects(1) 'put index of your chartobject here

    'for first serie, for point 2nd here
    '(change accordingly to what you need)
    With tmpCHR.Chart.SeriesCollection(1).Points(2)

        Sheet1.Shapes.AddTextbox(msoTextOrientationHorizontal, _
                .Left + tmpCHR.Left, _
                .Top + tmpCHR.Top, _
                100, 15) _
                .TextFrame.Characters.Text = "Temperature"
    End With

End Sub

结果呈现下图后。

在此处输入图像描述

于 2013-07-11T05:57:50.817 回答
3

另一种选择是使用 Excel 的数据标签。我看到了两个更优雅的选择:

  1. 在图表中只包含一个条目创建一个新的数据系列,为该系列提供坐标和您想要查看的标签的名称。现在激活系列的标记选项(如果尚未完成),右键单击数据点,单击“添加数据标签”。现在您将看到该点的 y 值。通过再次右键单击并选择“格式化数据标签”,您可以将文本更改为系列名称,位置、边框等也是可修改的。下面是一个包含两个数据点的示例。您可以删除第二个点、线和标记,但像这样您会看到它是如何工作的。 数据标签示例
  2. 与 KazJaw 的解决方案类似,您可以使用系列的实际数据点来附加自定义数据标签。这需要一些编码,我将其用于名为“Topview”的图表,并在数据点旁边写下百分比
Sub Add_Text_to_data_points()
    percentages(1) = 0.1
    percentages(2) = 0.23
    '.... further entries
    chartNumber = findChartNumber("Topview")
    collNumber = 12 ' index of the "points" series
    Set tmpCHR = ActiveSheet.ChartObjects(chartNumber) 
    For i = 1 To tmpCHR.Chart.SeriesCollection(collNumber).Points.count
    With tmpCHR.Chart.SeriesCollection(collNumber).Points(i)
        If percentages(i) <> 0 Then
            .DataLabel.Text = format(percentages(i), "0%")
        End If
    End With
    Next
End Sub
于 2014-05-07T13:22:37.510 回答