Как сделать, чтобы форматы чисел оси диаграммы соответствовали форматам чисел набора данных - PullRequest
0 голосов
/ 22 января 2019

В настоящее время я использую код VBA, который автоматически форматирует графики для меня.Раздел кода, который устанавливает числовой формат меток оси Y, выглядит следующим образом:

If chart1.Type <> xlPie And chart1.Type <> xlDoughnut Then

    If InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "%") <> 0 And _
    chart1.Axes(xlValue).MaximumScale < 0.1 Then
        chart1.Axes(xlValue).TickLabels.NumberFormat = "#0.0%;(#0.0)%"
    ElseIf InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "%") <> 0 And _
    chart1.Axes(xlValue).MaximumScale >= 0.1 Then
        chart1.Axes(xlValue).TickLabels.NumberFormat = "##0%;(##0)%"
    ElseIf InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, ".") <> 0 And _
    InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "%") = 0 And _
        Len(chart1.Axes(xlValue).MaximumScale) > 2 Then _
        chart1.Axes(xlValue).TickLabels.NumberFormat = "#0.0;(#0.0)"
    Else
        chart1.Axes(xlValue).TickLabels.NumberFormat = "#,##0;(#,##0)"
    End If

    If InStr(chart1.Axes(xlCategory).TickLabels.NumberFormat, "yy") <> 0 Then _
    chart1.Axes(xlCategory).TickLabels.NumberFormat = "mmm yy"

Я попытался изменить этот код, чтобы он также мог обрабатывать числовой формат: "#, ## 0.0x; (#, ## 0.0) x; 0.0x "

Это мой исправленный код:

If chart1.Type <> xlPie And chart1.Type <> xlDoughnut Then

    If InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "%") <> 0 And _
    chart1.Axes(xlValue).MaximumScale < 0.1 Then
        chart1.Axes(xlValue).TickLabels.NumberFormat = "#0.0%;(#0.0)%"
    ElseIf InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "%") <> 0 And _
    chart1.Axes(xlValue).MaximumScale >= 0.1 Then
        chart1.Axes(xlValue).TickLabels.NumberFormat = "##0%;(##0)%"
    ElseIf InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, ".") <> 0 And _
    InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "%") = 0 And _
        Len(chart1.Axes(xlValue).MaximumScale) > 2 Then _
        chart1.Axes(xlValue).TickLabels.NumberFormat = "#0.0;(#0.0)"
    ElseIf InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "x") <> 0 And _
    chart1.Axes(xlValue).MaximumScale < 0.1 Then
        chart1.Axes(xlValue).TickLabels.NumberFormat = "#0.0x;(#0.0)x"
    ElseIf InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "x") <> 0 And _
    chart1.Axes(xlValue).MaximumScale >= 0.1 Then
        chart1.Axes(xlValue).TickLabels.NumberFormat = "##0x;(##0)x"
    ElseIf InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, ".") <> 0 And _
    InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "x") = 0 And _
        Len(chart1.Axes(xlValue).MaximumScale) > 2 Then _
        chart1.Axes(xlValue).TickLabels.NumberFormat = "#0.0;(#0.0)"
    Else
        chart1.Axes(xlValue).TickLabels.NumberFormat = "#,##0;(#,##0)"
    End If

    If InStr(chart1.Axes(xlCategory).TickLabels.NumberFormat, "yy") <> 0 Then _
    chart1.Axes(xlCategory).TickLabels.NumberFormat = "mmm yy"

К сожалению, это не похоже на работу.

В основном, если у меня есть набор данных:

2016 0,3x

2017 0,4x

2018 0,5x

График уНа ярлыках оси X нет символов

У кого-нибудь есть предложения?

Заранее спасибо,

Томас

1 Ответ

0 голосов
/ 22 января 2019

Else If заявления

ElseIf InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "x") <> 0 And _
chart1.Axes(xlValue).MaximumScale < 0.1 Then
    chart1.Axes(xlValue).TickLabels.NumberFormat = "#0.0x;(#0.0)x"
ElseIf InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "x") <> 0 And _
chart1.Axes(xlValue).MaximumScale >= 0.1 Then
    chart1.Axes(xlValue).TickLabels.NumberFormat = "##0x;(##0)x"

Оценивают значение true только тогда, когда chart1.Axes(xlValue).TickLabels.NumberFormat уже содержит x, что означает, что, если ваши TickLabels уже не отформатированы с желаемым x, эта строка кода никогда не будет истинной. Попробуйте изменить «Не Равный» Оператор <> на =, чтобы, когда x не не был найден в вашей TickLabel, он форматировал его для включения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...