在Excel / VBA中将文本框附加到图表上的点或线

我想知道如何将文本框附加到我正在处理的macros的Excel图表中的一个点或一行。 我一直在使用.AddTextbox方法,如

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

但是,我必须手动将文本框拖动到它所表示的图表上,因为图表的方向不是直线。 有没有办法将线/点转换为我可以用作variables的图表方向? 或另一种方式? 可能使用datalabelfunction,但我想能够自定义一个轴的位置。 谢谢

要解决你的问题,你需要得到两个对象的左侧和顶部位置:

  1. 图表本身,相对于图表范围区域的左上angular设置哪个位置
  2. 哪一个位置是相对于图表的左上angular设置的

两者的结合与下面的代码(固定的参数 – 需要改变你的情况,可以更dynamic的循环)

 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 

结果呈现下面的图片。

在这里输入图像说明

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

  1. 使用图表中的一个条目创build一个新的数据系列,为该系列指定要查看的标签的坐标和名称。 现在激活系列的标记选项(如果尚未完成),右键单击数据点,单击“添加数据标签”。 现在你会看到这个点的y值。 通过再次右键单击并select“格式化数据标签”,您可以将文本更改为系列名称,位置,边框等也可以修改。 下面有两个数据点的例子。 你可以删除第二点,行和标记,但是像这样,你会看到它是如何工作的。 数据标签示例
  2. 与来自KazJaw的解决scheme类似,您可以使用系列的实际数据点来附加自定义数据标签。 这需要一些编码,我使用这个名为“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