录制宏是需要VBA的非常给力的帮手,在Excel中操作时,录制宏就可以轻松得到代码。 R U SURE??? 确实有些操作并不能录制代码。
即使可以被录制的操作,得到的代码是否可以正常使用呢?非常不幸的是,答案是否定的。
在Excel有一个图表,选中图表并设置图表字体为“微软雅黑”字号为9,录制宏得到的代码如下。
Sub 宏1()
ActiveChart.ChartArea.Select
With ActiveSheet.Shapes("图表 1").TextFrame2.TextRange.Font
.NameComplexScript = "微软雅黑"
.NameFarEast = "微软雅黑"
.Name = "微软雅黑"
End With
ActiveSheet.Shapes("图表 1").TextFrame2.TextRange.Font.Size = 9
End Sub
在Excel中选中图表,运行上述代码,错误信息如下所示。
虽然使用如下代码遍历Shapes集合,似乎可以访问Chart对象,但是能够使用的属性非常有限,并不能设置Chart对象的字体,因此上述录制代码产生运行时错误。这可以看做录制宏的一个BUG。
Sub ListShp()
Dim shp
For Each shp In ActiveSheet.Shapes
Debug.Print shp.Name
Next
End Sub
在VBA代码中应该使用ChartObject对象,才能设置Chart对象的字体,代码如下。
Sub SetChartFont()
With ActiveSheet.ChartObjects("图表 1").Chart.ChartArea.Format.TextFrame2.TextRange.Font
.NameComplexScript = "微软雅黑"
.NameFarEast = "微软雅黑"
.Name = "微软雅黑"
.Size = 9
End With
End Sub
VBA是个好工具,但是它并不是万能的,使用中要注意这些小异常。