我有几个宏可以批量处理数据并构建图表。此数据同时使用主要和次要y轴,有时最好以线性标度或对数标度查看。使用图表对象的“ .SetElement”方法将轴刻度格式化为对数格式时,我没有遇到麻烦:
chartSheet.SetElement (msoElementPrimaryCategoryAxisLogScale)
chartSheet.SetElement (msoElementPrimaryValueAxisLogScale)
chartSheet.SetElement (msoElementSecondaryValueAxisLogScale)
其中“ chartSheet”是图表对象
Dim chartSheet As Chart
Set chartSheet = Sheets(chartExistsIdx)
那行得通,但是我找不到使用该方法将其设置回线性比例的枚举或值。 对于每个轴,可以使用以下选项将比例尺设置为与单位线性:
msoElementPrimaryCategoryAxisThousands
msoElementPrimaryCategoryAxisMillions
msoElementPrimaryCategoryAxisBillions
但是,这会将轴显示单位更改为千,百万或十亿。
msoElementPrimaryCategoryAxisNone
将使轴显示= none,而不将显示单位设置为none。
我还没有找到使用此方法直接将比例尺设置为线性或使用单位进行设置的方法,而是将单位设置为“无”。
我尝试过的另一种方法是使用轴对象的“ ScaleType”属性。 根据文档:
expression.Axes(类型,AxisGroup)
类型可以是xlValue,xlCategory或xlSeriesAxis
AxisGroup可以是xlPrimary或xlSecondary
ScaleType可以是xlScaleLinear或xlScaleLogarithmic
所以我尝试了
chartSheet.Axes(xlCategory, xlSecondary).ScaleType = xlScaleLinear
但这会给我一个方法失败的错误。
有人知道上述方法有什么问题吗,还是知道另一种以编程方式将次要Y轴设置为具有线性比例并以正常的自然单位显示的方法?
----更新------
我发现问题只针对x轴或使用“ xlCategory”。我能够使用它并使用
设置y1和y2轴的线性比例这有效
chartSheet.Axes(xlValue, xlPrimary).ScaleType = xlScaleLinear
chartSheet.Axes(xlValue, xlSecondary).ScaleType = xlScaleLinear
但是这不起作用
chartSheet.Axes(xlCategory, xlPrimary).ScaleType = xlScaleLinear
关于枚举的注释:“ xlScaleLinear”和“ xlLinear”都代表“ -4132”,并且都可以与值轴一起使用,但不适用于类别。
---- X轴周围的解决方案-------
我确定了设置显示单位的语法,因此现在可以使用此解决方法。将刻度设置为线性,以“千”为显示单位,然后将轴的显示单位属性重置为无。
chartSheet.SetElement (msoElementPrimaryCategoryAxisThousands)
chartSheet.Axes(xlCategory, xlPrimary).DisplayUnit = xlNone