Это очень своеобразная ошибка!
Полагаю, это связано с тем, что ось XlCategory становится вертикальной при использовании типа диаграммы "Воронка":
Я испробовал все стандартные способы VBA, о которых только мог подумать, но это, похоже, не работает.Я даже пытался посмотреть, можем ли мы сохранить диаграмму воронок в качестве шаблона, а затем использовать VBA для применения этого шаблона, но «Сохранить как шаблон» по какой-то причине недоступно ...
Итак, причина, по которой я объясняю все это вместо того, чтобы писать решение, заключается в том, что существует обходной путь, но такого рода вещи следует использовать только в качестве последнего средства.И если вы еще не догадались, я говорю об использовании метода SendKeys .
Отказ от ответственности : Как всегда, используя SendKeys несколько сложно и может привести к неожиданным результатам.Я бы порекомендовал прочитать некоторые статьи, чтобы ознакомиться с ним перед его использованием. Эта статья будет хорошей отправной точкой.
Кроме того, чтобы избежать каких-либо проблем, не запускайте макрос, который имеет метод SendKeys , используя кнопку Run в 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, если мы хотим изменить имя шрифта, это будет:
- Тип Alt - для запуска комбинации клавиш Alt Key.
- Введите «H» - чтобы перейти на вкладку «Домой»
- Введите «FF» - для выбора текстового поля «Имя шрифта»
- Введите «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 , вы сможете использовать его в других контекстах, где это требуется ...