Vba 在图表中定位标签
我有一个包含两个图表的电子表格,其中我想根据表格中的值在系列的某个点旁边添加一些文本框 我为此创建了两个程序,每个程序都有自己的优缺点:Vba 在图表中定位标签,vba,excel,excel-2016,Vba,Excel,Excel 2016,我有一个包含两个图表的电子表格,其中我想根据表格中的值在系列的某个点旁边添加一些文本框 我为此创建了两个程序,每个程序都有自己的优缺点: Sub add_comments(apply_to As Series, source_range As Range) Dim i As Long Dim c As Range If source_range.Count > apply_to.Points.Count Then Set source_range = sour
Sub add_comments(apply_to As Series, source_range As Range)
Dim i As Long
Dim c As Range
If source_range.Count > apply_to.Points.Count Then
Set source_range = source_range.Resize(apply_to.Points.Count, 1)
End If
i = 1
For Each c In source_range
If Not IsError(c) And i <= apply_to.Points.Count Then
If Len(c.Text) <> 0 Then
apply_to.Points(i).HasDataLabel = True
apply_to.Points(i).DataLabel.Text = c.Value2
apply_to.Points(i).DataLabel.Format.AutoShapeType = msoShapeRectangularCallout
With apply_to.Points(i).DataLabel.Format.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 0, 0)
End With
apply_to.Points(i).DataLabel.Position = xlLabelPositionAbove
Else
If apply_to.Points(i).HasDataLabel Then
apply_to.Points(i).DataLabel.Delete
End If
End If
End If
i = i + 1
Next c
End Sub
子添加注释(将注释应用于As系列,源代码范围作为范围)
我想我会坚持多久
调光范围
如果source_range.Count>将_应用于.Points.Count,则
设置源范围=源范围。调整大小(应用到.Points.Count,1)
如果结束
i=1
对于源_范围内的每个c
如果文本框方法不是iError(c)和i,则可以使用以下方法将其设置为自动调整大小:
.TextFrame2.AutoSize = msoAutoSizeShapeToFitText
然后有两个文本换行选项将更改外观。您可以将文本设置为换行:
.TextFrame2.WordWrap = True
这不会改变文本框的宽度,它会像上面那样垂直地显示文本框
也可以将其设置为不换行:
.TextFrame2.WordWrap = False
这将使其水平排列,直到遇到断线
因此,您可以根据需要设置文本框宽度并打开换行,或者在源文本中添加显式换行符(Alt+Enter)并关闭换行。我认为最好的办法是首先计算哪些点将获得数据标签,然后计算出数据标签可以具有的最大宽度。这个宽度可能太小,您可以使用datalabel.top属性更改数据标签相对于图表顶部的位置,并将标签相互重叠。@Luuklag是的,这似乎是我最好的选择。但是,找出防止它们重叠的方法将是一件非常痛苦的事情:-非常感谢你的建议,我已经在使用它方面取得了一些进展。谢谢-正如你从图片中看到的,文本框会自动调整大小,严格地说,问题是它只在一个维度上自动调整大小!当然,用一个设定的宽度创建它们,然后从那里开始工作可能是一个解决方案。您是否尝试过关闭自动换行功能?这是一种选择吗?
.TextFrame2.WordWrap = False