【发布时间】:2019-06-14 22:39:23
【问题描述】:
我有几个宏来批处理数据和构建图表。此数据同时使用主要和次要 y 轴,有时在线性刻度或对数刻度上查看效果更好。我可以使用图表对象的“.SetElement”方法将坐标轴比例格式化为对数,如下所示:
chartSheet.SetElement (msoElementPrimaryCategoryAxisLogScale)
chartSheet.SetElement (msoElementPrimaryValueAxisLogScale)
chartSheet.SetElement (msoElementSecondaryValueAxisLogScale)
其中“chartSheet”是一个图表对象
Dim chartSheet As Chart
Set chartSheet = Sheets(chartExistsIdx)
这可行,但我找不到使用该方法将其设置回线性比例的枚举或值。 对于每个轴,都有选项可以将比例设置为使用单位的线性
msoElementPrimaryCategoryAxisThousands
msoElementPrimaryCategoryAxisMillions
msoElementPrimaryCategoryAxisBillions
但是,这会将轴显示单位更改为以千、百万或十亿为单位。
msoElementPrimaryCategoryAxisNone
将使轴显示=无,不将显示单位设置为无。
我还没有找到一种方法来使用这种方法直接将比例设置为线性或使用单位进行设置,然后将设置单位设置为“无”。
我尝试过的另一种方法是使用轴对象的“ScaleType”属性。 根据文档:
表达式.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
【问题讨论】:
-
这个问题我早就知道了,已经通知了微软。但就像许多其他事情一样,你有一个可以使用的解决方法是一件好事。
标签: excel vba excel-charts