我必须仅使用 VBA 在 Excel 中制作柱形图(无需用户输入)。
我想格式化 x 轴的标签,以便每个标签的对齐方式变为 -270 度。这可以通过更改“格式轴”对话框的“对齐”选项卡中的“自定义角度”属性来手动完成。
我记录了一个宏,但 Excel 似乎没有记录对齐步骤。
如果您使用的是 Excel 2007,请尝试使用早期版本,因为 2007 的宏记录器有点残缺。
这就是我得到的:
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.Axes(xlCategory).Select
Selection.TickLabels.Orientation = xlUpward
ActiveChart.Axes(xlCategory).TickLabels.Orientation = 67
关于 .Activate
老派的 VBA 宏通常会让人们认为您必须“激活”并反对使其成为“当前”。就像您单击图形表示一样,您使用鼠标和键盘所做的一切都会被激活的对象接收。Microsoft Office产品的“宏生成器”是这种编码风格的罪魁祸首。
但是,在 VBA 编程或使用来自 C# 或其他流行语言的 Office API 的世界中,这不是应该的方式。
要修改图表对象、线条等,您可以通过对象引用对对象本身进行操作。一旦获得它,您就可以访问所有方法和属性,并且“激活”不是概念的一部分。如果您出于某种原因实际上希望让对象获得一些焦点以供用户查看 - 视觉对象通常具有要调用的“Activate()”函数。
在此示例中,图表中多个系列的线宽设置为 1:
Sub Change_all_charts()
Dim ch As chart
Dim ws As Worksheet
Dim ChtObj As ChartObject
Dim srs As Series
'Get a reference to the active worksheet
Set ws = ActiveSheet
'Loop each chart object in worksheet ws
For Each ChtObj In ws.ChartObjects
'Operate on 'ChtObj.chart' object using . notation
With ChtObj.chart
Debug.Print "Chart being modified: '" & .Name & "'"
'Loop through all series in the chart .Series collection
For Each srs In .SeriesCollection
Debug.Print " Series being modified: '" & srs.Name & "'"
'Set the series line width
srs.Format.Line.Weight = 1
Next
End With
Next
End Sub
在过去(甚至现在),财务人员进行 Excel 编程并使他们的工作表像疯了一样闪烁和动画,因为他们认为对象需要接收“焦点”才能进行修改。
好吧,现在有人说它在过去的 40 年里一直在“困扰”我。