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