Excel 使用主y轴和次y轴时,如何使用vba将图表轴比例从日志更改为线性

Excel 使用主y轴和次y轴时,如何使用vba将图表轴比例从日志更改为线性,excel,vba,excel-charts,Excel,Vba,Excel Charts,我有几个宏来批处理数据和构建图表。此数据同时使用主y轴和次y轴,有时最好以线性比例或对数比例查看。使用图表对象的“.SetElement”方法将轴比例设置为对数,我没有遇到任何问题,如下所示: chartSheet.SetElement (msoElementPrimaryCategoryAxisLogScale) chartSheet.SetElement (msoElementPrimaryValueAxisLogScale) chartSheet.SetElement (msoElemen

我有几个宏来批处理数据和构建图表。此数据同时使用主y轴和次y轴,有时最好以线性比例或对数比例查看。使用图表对象的“.SetElement”方法将轴比例设置为对数,我没有遇到任何问题,如下所示:

chartSheet.SetElement (msoElementPrimaryCategoryAxisLogScale)
chartSheet.SetElement (msoElementPrimaryValueAxisLogScale)
chartSheet.SetElement (msoElementSecondaryValueAxisLogScale)
其中“chartSheet”是一个图表对象

  Dim chartSheet As Chart
  Set chartSheet = Sheets(chartExistsIdx)
这是可行的,但我找不到使用该方法将其设置回线性刻度的枚举或值。 对于每个轴,都可以使用以下选项将比例设置为与单位线性:

msoElementPrimaryCategoryAxisThousands
msoElementPrimaryCategoryAxisMillions
msoElementPrimaryCategoryAxisBillions
但是,这会将轴显示单位也更改为千、百万或数十亿

msoElementPrimaryCategoryAxisNone
将使轴显示=无,而不是将显示单位设置为无

chartSheet.SetElement (msoElementPrimaryCategoryAxisThousands)
chartSheet.Axes(xlCategory, xlPrimary).DisplayUnit = xlNone
我没有找到一种方法可以使用此方法直接将比例设置为线性或使用单位进行设置,然后将单位设置为“无”


我尝试过的另一种方法是使用axis对象的“ScaleType”属性。 根据文件:

expression.Axes(类型,AxisGroup)

类型可以是xlValue、xlCategory或xlSeriesAxis

AxisGroup可以是xlPrimary或xlSecondary

ScaleType可以是xlScaleLinear或xlScaleLogarithmic

所以我试过了

chartSheet.Axes(xlCategory, xlSecondary).ScaleType = xlScaleLinear
但这将给我一个方法失败的错误

有没有人知道上述方法可能有什么问题,或者知道另一种方法可以通过编程方式将次Y轴设置为线性比例,并以正常的本机单位显示

----更新------

我发现问题更具体到x轴或使用“xlCategory”。我能够让它工作,并设置一个线性规模的y1和y2轴使用

这很有效

然而,这不起作用

关于枚举的一个注意事项:“xlScaleLinear”和“xlLinear”都表示“-4132”,它们都将用于值轴,但不用于类别

----X轴的变通解决方案-------

我制定了设置显示单位的语法,因此现在可以使用此解决方案。将比例设置为线性,显示单位为“千”,然后将轴的“显示单位”属性重置为“无”

chartSheet.SetElement (msoElementPrimaryCategoryAxisThousands)
chartSheet.Axes(xlCategory, xlPrimary).DisplayUnit = xlNone

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

xlLinear

请试试这个。

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

xlLinear

请试试这个。

看起来“xlLinear”和“xlScaleLinear”是可以互换的,它们都代表int-4132。查看我的更新,我发现是轴规格导致了问题,“xlCategory”是问题术语,看起来“xlLinear”和“xlScaleLinear”是可互换的,两者都表示int-4132。查看我的更新,我发现是Axis规范导致了问题,“xlCategory”是问题术语这是一个我已经知道了一段时间的问题,并且已经通知了Microsoft。但和其他许多事情一样,幸好你们有一个可以使用的解决方法。这是一个我已经知道了一段时间的问题,微软已经得到了通知。但和其他许多事情一样,你们有一个可以使用的变通方法是件好事。
chartSheet.SetElement (msoElementPrimaryCategoryAxisThousands)
chartSheet.Axes(xlCategory, xlPrimary).DisplayUnit = xlNone