我对VBA很新,并试图选择交替点来放置数据标签的上方和下方。
这是我的代码,目前正在将数据标签放在我想要的第1点以下,但是我希望第3个点的标签也放在下面,其他上面的标签。我尝试了很多不同的循环和代码,但似乎没有任何工作,我不确定为什么它似乎复制和粘贴而不是移动标签。
For x = 1 To ActiveChart.SeriesCollection(1).Points.Count
With ActiveChart.SeriesCollection(1).Points(x).DataLabel
.Position = xlLabelPositionBelow
.Orientation = xlHorizontal
End With
x = x + 2
Next x
For x = 2 To ActiveChart.SeriesCollection(1).Points.Count
With ActiveChart.SeriesCollection(1).Points(x).DataLabel
.Position = xlLabelPositionAbove
.Orientation = xlHorizontal
End With
x = x + 2
Next x
如果可能的话,我觉得这很简单。所以任何帮助将不胜感激。有可能有一种更简单的方法吗? 提前谢谢。
答案 0 :(得分:2)
问题似乎是你过度迭代' X。你希望x增加两倍,你实际上在说#34; x = x + 2"那么也说" + 1 x" (这是Next做的)。您可以通过更改For循环来解决此问题,并说出#34;对于x = 1到3步骤2"。然后当你使用" Next x"时,它将添加2而不是1。
但是,我建议你像下面这样做,因为它(在我看来)更清楚一点,你想要一个偶数x的东西,一些奇怪的x:
For x = 1 To ActiveChart.SeriesCollection(1).Points.Count
With ActiveChart.SeriesCollection(1).Points(x).DataLabel
If x Mod 2 = 1 Then 'If x is odd, put label below point
.Position = xlLabelPositionBelow
.Orientation = xlHorizontal
Else 'if x is even, put label above point
.Position = xlLabelPositionAbove
.Orientation = xlHorizontal
End If
End With
Next x
答案 1 :(得分:1)
ActiveChart.SeriesCollection(1).Points(1).DataLabel.Position = xlLabelPositionBelow
ActiveChart.SeriesCollection(1).Points(2).DataLabel.Position = xlLabelPositionAbove
ActiveChart.SeriesCollection(1).Points(3).DataLabel.Position = xlLabelPositionBelow
For x = 4 to ActiveChart.SeriesCollection(1).Points.Count
ActiveChart.SeriesCollection(1).Points(x).DataLabel.Position = xlLabelPositionAbove
Next