Как использовать VBA, чтобы изменить масштаб осей диаграммы на линейный от лог при использовании первичной и вторичной осей Y - PullRequest
1 голос
/ 13 июня 2019

У меня есть несколько макросов для пакетной обработки данных и построения диаграмм.Эти данные используют как первичные, так и вторичные оси 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».


Еще один подход, который я пробовал, - использовать свойство ScaleType объектов оси.Согласно документации:

expression.Axes (Type, 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

, однако это НЕwork

chartSheet.Axes(xlCategory, xlPrimary).ScaleType = xlScaleLinear

Примечание к перечислениям: "xlScaleLinear" и "xlLinear" оба представляют "-4132" и оба будут работать с осями значения, но не с категорией.

---- РАБОЧЕЕ РЕШЕНИЕ ДЛЯ X-Axis -------

Я разработал синтаксис для установки единиц отображения, поэтому теперь могу использовать эту работу вокруг.Установите шкалу в линейное значение с тысячами в качестве единицы отображения, затем установите для свойства оси единицы измерения значение none.

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

1 Ответ

0 голосов
/ 13 июня 2019

Я пытался записывать, применяя масштаб журнала и сбрасывая его. я обнаружил, что перечисление scaletype было

xlLinear.

Пожалуйста, попробуйте это. enter image description here

...