在使用主要和次要y轴时如何使用vba将图表轴的比例从对数更改为线性

时间:2019-06-13 03:17:07

标签: excel vba excel-charts

我有几个宏可以批量处理数据并构建图表。此数据同时使用主要和次要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

1 个答案:

答案 0 :(得分:0)

我尝试在应用对数刻度并取消设置时进行记录。 我发现scaletype枚举是

xlLinear

请尝试这个。 enter image description here