我要更改轴xlCategory
上的字体大小。我正在运行以下代码,但失败了。我一直在寻找解决方法。图表是“渠道”类型123。在其他类型的图表上,代码运行良好。
With ActiveChart.Axes(xlCategory).TickLabels.font
.size = 12
.Name = "Arial"
End With
我得到了错误:
“对象不支持此操作”
我还试图运行其他代码,但也没有成功。
ActiveChart.Axes(xlCategory).Select
With Selection.Format.TextFrame2.TextRange.font
.size = 12
End With
我得到了错误:
“对象chartformat的方法textframe2失败”
答案 0 :(得分:0)
这是一个非常特殊的错误!
我想这与以下事实有关:当您使用“漏斗”图表类型时, XlCategory 轴变为垂直:
我尝试了所有可以想到的标准VBA方式,但这似乎不起作用。我什至试图查看是否可以将漏斗图另存为模板,然后使用VBA来应用此模板,但是由于某些原因,“另存为模板”不可用...
因此,我之所以解释所有这些而不是编写解决方案的原因是因为有一种解决方法,但是这种事情只能作为最后的手段。如果您还没猜到的话,那是在谈论使用 SendKeys 方法。
免责声明:和往常一样,使用 SendKeys 有点棘手,并且可能导致意外结果。我建议阅读一些文章以使您熟悉它,然后再使用它。 This article将是一个很好的起点。
此外,为避免出现任何问题,请不要在VBE中使用“运行”按钮运行具有 SendKeys 方法的宏,因为必须将击键发送到Excel窗口而不是VBE窗口。我建议使用快捷方式启动宏来启动宏。例如,您可以通过运行类似于以下内容的宏来使用Application.OnKey method:
Sub SetShortcut()
'Set the shortcut for the macro to be CTRL+ALT+m
Application.OnKey "^%m", "NameOfYourMacro"
End Sub
使用Sendkeys的示例
这个想法是使用Sendkeys发送击键序列,这将给我们想要的结果。在这里,我们要更改 XlCategory 轴的大小和字体名称。通过使用正确的Alt key shortcut sequence,我们可以实现这一目标。我不确定所有版本的Excel的序列是否相同,但是对于Office 365,如果我们要更改字体名称,它将是:
要将此方法应用于 XlCategory 轴,我们需要确保在运行宏之前已已选择它。如果选中它,下面的代码应该可以解决问题:
Sub ChangeCategoryAxisFont()
'Font Name
Application.SendKeys Keys:="%", Wait:=True
Application.SendKeys Keys:="H", Wait:=True
Application.SendKeys Keys:="FF", Wait:=True
Application.SendKeys Keys:="Arial", Wait:=True
Application.SendKeys Keys:="~", Wait:=True 'Press Enter
'Size
Application.SendKeys Keys:="%", Wait:=True
Application.SendKeys Keys:="H", Wait:=True
Application.SendKeys Keys:="FS", Wait:=True
Application.SendKeys Keys:="12", Wait:=True
Application.SendKeys Keys:="~", Wait:=True 'Press Enter
'Restore Numlock (which gets disabled when your macro runs at least one SendKeys command)
Application.SendKeys Keys:="{NUMLOCK}", Wait:=True
End Sub
如果尚未选择它(即使选择了图表),则可能会遇到另一个问题:如果在宏中包含ActiveChart.Axes(xlCategory).Select
,则功能区中可用的选项将无法正确更新,并且上面的宏不起作用。为了使功能区更新,我们需要在短时间内结束所有宏的执行,然后再继续执行宏。
例如,您可以使用 Application.OnTime 方法安排宏运行一秒钟,如下所示:
Sub PreSelectAxisAndRunMainMacro()
ActiveChart.Axes(xlCategory).Select
Application.OnTime Now + TimeSerial(0, 0, 1), "ChangeCategoryAxisFont"
End Sub
我知道您可能会想:“所有这些只是为了更改字体?!”。是的,我知道,但是至少如果您熟悉如何使用 SendKeys 方法,您将可以在需要它的其他上下文中使用它。