Изменение размера шрифта метки оси в воронкообразной диаграмме (Excel 2016) - PullRequest
0 голосов
/ 27 ноября 2018

Я хочу изменить размер шрифта на оси xlCategory.Я запускаю код, как показано ниже, но он не работает.Я застрял в поиске обходных путей.Диаграмма типа "Воронка" 123. На других типах кода код работает нормально.

With ActiveChart.Axes(xlCategory).TickLabels.font
    .size = 12
    .Name = "Arial"
End With

Я получаю сообщение об ошибке:

"объект не поддерживает это действие«

Я также пытался запустить другой код, но безуспешно.

ActiveChart.Axes(xlCategory).Select
With Selection.Format.TextFrame2.TextRange.font
    .size = 12
End With

Я получаю сообщение об ошибке:

» методОшибка textframe2 объекта диаграммы формата "

1 Ответ

0 голосов
/ 28 ноября 2018

Это очень своеобразная ошибка!

Полагаю, это связано с тем, что ось XlCategory становится вертикальной при использовании типа диаграммы "Воронка":

enter image description here

Я испробовал все стандартные способы VBA, о которых только мог подумать, но это, похоже, не работает.Я даже пытался посмотреть, можем ли мы сохранить диаграмму воронок в качестве шаблона, а затем использовать VBA для применения этого шаблона, но «Сохранить как шаблон» по какой-то причине недоступно ...

enter image description here

Итак, причина, по которой я объясняю все это вместо того, чтобы писать решение, заключается в том, что существует обходной путь, но такого рода вещи следует использовать только в качестве последнего средства.И если вы еще не догадались, я говорю об использовании метода SendKeys .

Отказ от ответственности : Как всегда, используя SendKeys несколько сложно и может привести к неожиданным результатам.Я бы порекомендовал прочитать некоторые статьи, чтобы ознакомиться с ним перед его использованием. Эта статья будет хорошей отправной точкой.

Кроме того, чтобы избежать каких-либо проблем, не запускайте макрос, который имеет метод SendKeys , используя кнопку Run enter image description here в VBE, так как нажатие клавиши должнобыть отправлено в окно Excel, а не в окно VBE.Я предлагаю запустить макрос, используя ярлык для запуска вашего макроса.Например, вы можете использовать метод Application.OnKey , запустив макрос, подобный следующему:

Sub SetShortcut()

    'Set the shortcut for the macro to be CTRL+ALT+m
    Application.OnKey "^%m", "NameOfYourMacro"

End Sub

Пример использования Sendkeys

Идея состоит в том, чтобы использовать Sendkeys для отправки последовательности нажатий клавиш, которая даст нам желаемый результат.Здесь мы хотим изменить размер и имя шрифта оси XlCategory .Используя правильную комбинацию клавиш Alt , мы можем добиться этого.Я не уверен, что последовательность одинакова для всех версий Excel, но в Office 365, если мы хотим изменить имя шрифта, это будет:

  1. Тип Alt - для запуска комбинации клавиш Alt Key.
  2. Введите «H» - чтобы перейти на вкладку «Домой»
  3. Введите «FF» - для выбора текстового поля «Имя шрифта»
  4. Введите «Arial», а затем нажмите Введите - чтобы изменить шрифт на Arial.

Чтобы применить это к оси XlCategory , нам нужноперед запуском макроса убедитесь, что он уже выбран .Если он выбран, следующий код должен помочь:

Sub ChangeCategoryAxisFont()

    'Font Name
    Application.SendKeys Keys:="%", Wait:=True
    Application.SendKeys Keys:="H", Wait:=True
    Application.SendKeys Keys:="FF", Wait:=True
    Application.SendKeys Keys:="Arial", Wait:=True
    Application.SendKeys Keys:="~", Wait:=True 'Press Enter

    'Size
    Application.SendKeys Keys:="%", Wait:=True
    Application.SendKeys Keys:="H", Wait:=True
    Application.SendKeys Keys:="FS", Wait:=True
    Application.SendKeys Keys:="12", Wait:=True
    Application.SendKeys Keys:="~", Wait:=True 'Press Enter

    'Restore Numlock (which gets disabled when your macro runs at least one SendKeys command)
    Application.SendKeys Keys:="{NUMLOCK}", Wait:=True

End Sub

Если он еще не выбран (даже если выбран график), у вас может возникнуть другая проблема: если вы включите ActiveChart.Axes(xlCategory).Select вВаш макрос, параметры, доступные на ленте, не будут обновлены правильно, и макрос выше не будет работать.Чтобы позволить обновлению ленты, нам нужно на несколько секунд прекратить выполнение любых макросов и продолжить работу с нашим макросом.

Например, вы можете использовать метод Application.OnTime чтобы запланировать запуск макроса через секунду, например:

Sub PreSelectAxisAndRunMainMacro()

    ActiveChart.Axes(xlCategory).Select
    Application.OnTime Now + TimeSerial(0, 0, 1), "ChangeCategoryAxisFont"

End Sub

Я знаю, что вы думаете: «Все это только для того, чтобы внести некоторые изменения в шрифт ?!».Да, я знаю, но, по крайней мере, если вы ознакомитесь с тем, как использовать метод SendKeys , вы сможете использовать его в других контекстах, где это требуется ...

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