Это очень своеобразный баг!
Я предполагаю, что это связано с тем, что ось XlCategory становится вертикальной, когда вы используете тип диаграммы "Воронка":
![введите здесь описание изображения](https://i.stack.imgur.com/rRjtC.png)
Я пробовал все стандартные способы VBA, о которых только мог подумать, и это, похоже, не работает. Я даже пытался посмотреть, можем ли мы сохранить воронкообразную диаграмму в качестве шаблона, а затем использовать VBA для применения этого шаблона, но «Сохранить как шаблон» по какой-то причине недоступно...
![введите здесь описание изображения](https://i.stack.imgur.com/2beDW.png)
Итак, причина, по которой я объясняю все это вместо того, чтобы писать решение, заключается в том, что есть обходной путь, но такие вещи следует использовать только в крайнем случае. И если вы не догадались, я говорю об использовании метода SendKeys.
Отказ от ответственности. Как всегда, использование SendKeys несколько сложно и может привести к неожиданным результатам. Я бы порекомендовал прочитать несколько статей, чтобы ознакомиться с ним, прежде чем использовать его. Эта статья может стать хорошей отправной точкой.
Кроме того, во избежание проблем не запускайте макрос с методом SendKeys с помощью кнопки «Выполнить»
в VBE, так как нажатие клавиши должно быть отправлено в окно Excel, а не в окно VBE. Я предлагаю запустить макрос с помощью ярлыка для запуска вашего макроса. Например, вы можете использовать приложение . 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.
- Введите «H» — чтобы перейти на вкладку «Главная».
- Введите «FF» — чтобы выбрать текстовое поле «Имя шрифта».
- Введите «Arial» и нажмите Enter, чтобы изменить шрифт на 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, вы сможете использовать его в других контекстах, где это необходимо...
person
DecimalTurn
schedule
28.11.2018