我正在尝试编写一个宏来格式化图表以实现一致性。我坚持认为最简单的部分。标记轴。它不会标记主值轴(y轴)。我在2010年和2013年多次录制这个宏。出了什么问题?我运行宏,它在第3行调试,几乎就像标签不存在一样。只运行前两行证明了这一点。有什么帮助吗?
ActiveChart.SetElement (msoElementPrimaryValueAxisTitleAdjacentToAxis)
Selection.Format.TextFrame2.TextRange.Characters.Text = "Primary Y-Axis"
With Selection.Format.TextFrame2.TextRange.Characters(1, 14).ParagraphFormat
.TextDirection = msoTextDirectionLeftToRight
.Alignment = msoAlignCenter
End With
With Selection.Format.TextFrame2.TextRange.Characters(1, 14).Font
.BaselineOffset = 0
.Bold = msoTrue
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
.Fill.Visible = msoTrue
.Fill.ForeColor.RGB = RGB(0, 0, 0)
.Fill.Transparency = 0
.Fill.Solid
.Size = 10
.Italic = msoFalse
.Kerning = 12
.Name = "+mn-lt"
.UnderlineStyle = msoNoUnderline
.Strike = msoNoStrike
End With
答案 0 :(得分:3)
明显的运行时错误来源依赖于记录的宏。他们通常需要一些调整。在您的情况下,我认为问题可能是轴'.HasTitle
属性仍设置为False
,这会在您尝试访问.AxisTitle
属性时引发该错误。
注意:您可以阅读this了解Select
和Activate
方法存在问题的原因。
在此代码中,我定义了一些变量来表示图表和轴,并确保.HasTitle
属性为true。没遇到任何错误。 :)
Sub foo()
Dim cht As Chart
Dim ax As Axis
Set cht = Sheet1.ChartObjects(1).Chart '# modify as needed
cht.SetElement (msoElementPrimaryValueAxisTitleAdjacentToAxis)
'# set your axis in a variable
Set ax = cht.Axes(xlValue, xlPrimary)
'# Make sure your axis HAS a title
ax.HasTitle = True
With ax.AxisTitle.Format.TextFrame2.TextRange
.Characters.Text = "Primary Y-Axis"
With .Characters(1, 14).ParagraphFormat
.TextDirection = msoTextDirectionLeftToRight
.Alignment = msoAlignCenter
End With
End With
End Sub
答案 1 :(得分:0)
我知道这很旧了,但是我遇到了同样的问题(对于实际的轴标签,而不是标题),并且找到了解决方案:不要在SetElement语句中使用msoElementPrimaryValueAxisTitleAdjacentToAxis,而是使用数字307。
在我的情况下,msoElementPrimaryValueAxisTitleAdjacentToAxis被解释为306,它对应于msoElementPrimaryValueAxisTitleNone(将轴设置为none)。因此,在关闭轴后,尝试对其进行修改时,会出现错误,因为您无法修改不存在的内容。
请参阅此处以供参考:MsoChartElementType enumeration
答案 2 :(得分:0)
已录制的宏将引导您进入一些讨厌的兔子洞。例如:
cht.SetElement (msoElementPrimaryValueAxisTitleAdjacentToAxis)
SetElement
的文献资料不多,且存在错误。记录器会在参数周围给您不必要的括号,反正这只是一个已命名的常量。
录制的宏的另一个问题是,不必要地列出了所有默认值,以及一些无用的东西,例如
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
会吗?
最好只使用逐个元素的语法并明确地执行所需的操作,而不要依赖一些不可思议的,可能会被错误命名的,包罗万象的常量。
使用对象浏览器,但首先,右键单击它,然后选择“显示隐藏的成员”。它显示了一些据认为已过时的成员,但是,来吧,他们实际上不会删除AxisTitle.Font.Bold
来支持AxisTitle.Format.TextFrame2.TextRange.Font.Bold
。
因此,只需要将轴标题设置为所需的格式就可以了:
Sub FormatAxis()
With ActiveChart
.HasAxis(xlValue, xlPrimary) = True
With .Axes(xlValue, xlPrimary)
.HasTitle = True
With .AxisTitle
.Text = "Primary Y Axis"
With .Font
.Bold = True
.Size = 10
End With
End With
End With
End With
End Sub