2016-08-29 4 views
2

Как сделать Auto-hide Ribbon в Excel 2013 в VBA? Я хотел бы достичь именно то, что я получаю, нажав на значок стрелки верхней в правой верхней части меню Excel, отмеченные синим на рисунке ниже, а затем нажав на первый вариант, отмеченные оранжевым цветом:VBA auto hide лента в Excel 2013

enter image description here

Я также был бы заинтересован в переходе VBA на третий вариант Show Tabs and Commands. Для меня важно сохранить в меню Excel значок верхней стрелки (отмечен синим).

Я пробовал подсказки, показанные в этой теме: VBA minimize ribbon in Excel , но я не удовлетворен результатами.

Покушение 1

Application.ExecuteExcel4Macro "Show.ToolBar(""Ribbon"",False) 

Это хорошо, но скрывает синий значок.

Покушение 2

CommandBars.ExecuteMso "MinimizeRibbon" 

Это близко к тому, что я хочу. Это сохраняет синий значок, но не скрывает все меню. Он переключается на второй параметр, отображаемый на рисунке Show Tabs.

Покушение 3

SendKeys "^{F1}" 

attampt не работает. Более того, он должен подражать попытке 2. Так что даже это меня не удовлетворит.

ответ

7

Я не могу видеть, что кто-то принес это вверх ... Это не временное решение, это фактический idMSO для того, что я думаю, что вы ищете. Этот код заставляет мое окно Excel выглядеть так, как будто все прошло так же, как и первый вариант для Auto-Hide Ribbon.

Перед код работает, мое окно выглядит следующим образом, в 'Восстановить' размер:

enter image description here

Запуск следующий код:

Sub HideTheRibbon() 
    CommandBars.ExecuteMso "HideRibbon" 
End Sub 

Сделает ваше окно выглядит так, в максимальном размере окна (точно так же, как если бы вы нажали Auto-Hide Ribbon кнопка вручную):

enter image description here

Если вы хотите, чтобы лента автоматически скрыты при открытии книги, поместить это в коде рабочей книги:

Sub Workbook_Open() 
    CommandBars.ExecuteMso "HideRibbon" 
End Sub 

В качестве альтернативы, для достижения того же вещь, вы можете поместить этот код в модуле:

Sub Auto_Open() 
    CommandBars.ExecuteMso "HideRibbon" 
End Sub 

Если вы хотите, чтобы окно возвращалось обратно в нормальное состояние, вы снова запускаете тот же код. Другими словами, следующий код не будет иметь никакого визуального изменения на всех, когда побежал, потому что idMSO «HideRibbon» является ToggleButton:

Sub HideTheRibbon() 
    CommandBars.ExecuteMso "HideRibbon" 
    CommandBars.ExecuteMso "HideRibbon" 
End Sub 

Если вы хотите полный список всех idMSO в Excel, нажмите после этого обратиться к вам: Excel 2013+, Excel 2010, Excel 2007

+0

Я рад, что вы нашли это решение. Простой и работает :-) –

+0

Отличное решение. –

3

Вероятно, вы должны сделать что-то более сложное:

Используйте CommandBars.ExecuteMso "MinimizeRibbon", чтобы показать/скрыть ленту. В зависимости от того, что вы хотите, вы можете отображать/скрывать все остальные вкладки в ленте. Например. использовать что-то из кода здесь ->Excel Hide/Show all tabs on Ribbon except custom tab

Таким образом, 2 шага:

Шаг 1 - показать или скрыть с CommandBars.ExecuteMso

Шаг 2 - показать или скрыть остальные вкладки с некоторыми макросами из ссылки.

Немного большого обходного пути, но вы получите то, что хотите.

+0

Не могли бы вы указать на любой пример этапа 2? –

+0

В ссылке достаточно. Но все же, явно - здесь -> http://www.rondebruin.nl/win/s2/win012.htm. Идея состоит в том, чтобы убедиться, что всякий раз, когда вызывается «CommandBars.ExecuteMso MinimizeRibbon», вы вызываете дополнительный макрос (step2), который скрывает или показывает все вкладки. Г-н де Бруин объяснил это очень хорошо. Надеюсь, вам помогут :) – Vityata

+1

Ваш ответ очень полезен для создания пользовательской ленты и может привести к цели. Хотя при условии, что ссылки объясняют строение ленты четко, я рад, что есть простое решение, упомянутое Тайлером. Если бы Тайлер не раскрыл его решение, щедрость была бы твоей. Спасибо. –

3

Сначала перейдите в раздел «Параметры Excel» и перейдите к «Панель быстрого действия».

Оттуда найдите «Скрыть ленту» и добавьте в панель инструментов. После того, как он находится в QAT, вы можете быстро его вызвать с помощью ALT + # (на моем компьютере это восьмое, поэтому ALT + 8 будет автоматически скрываться).

enter image description here

Тогда просто добавить подпрограмму, которая делает SendKeys ALT затем 8:

Sub Macro1() 
ActiveSheet.Activate 
'Cells(1, 1).Select 
SendKeys "%0", True 
SendKeys "8", True 

End Sub 

Примечание: Я знаю, что это глупо иметь ActiveSheet.Activate, я просто добавил, что для тестирования макроса. В зависимости от того, как он вызывается, вы можете удалить/прокомментировать эту строку. % эквивалентен ALT, и технически я должен нажать 0, затем 8, отсюда две линии.

+1

Благодарим вас за эту идею. Так как в командах Excel есть такая «кнопка», нельзя ли ее вызвать без ключей отправки? Ваша идея - хороший трюк, но это не может быть сделано путем отправки ключей на других пользователях - если только они не изменят свою панель быстрого действия. –

+1

@PrzemyslawRemin - Хм, хорошо о других пользователях. Я уверен, что есть способ получить это, но вы правы, пара команд VBA, которые вы нашли, не совсем это делает. Для того, что тоже стоит, использование MacroRecorder не помогает - оно не отслеживает вас, скрывая ленту:/ – BruceWayne

+0

Почти все, что указано в списке команд, которые вы показывали на картинке, используют одни и те же слова и формат (без пробелов) как их idMSO. Обратитесь к ссылкам в нижней части моего ответа, и вы можете получить полные списки, чтобы сравнить их, если хотите. – Tyeler

1

Дайте это попробовать:

Sub ShowHideRibbon() 

If CommandBars("Ribbon").Controls(1).Height < 100 Then 
    CommandBars.ExecuteMso ("MinimizeRibbon") 
Else 
    CommandBars.ExecuteMso ("MinimizeRibbon") 
End If 

End Sub 

Или это:

Sub ShowHideRibbon1() 

If Application.ExecuteExcel4Macro("Get.ToolBar(7,""Ribbon"")") Then 
    Application.ExecuteExcel4Macro "Show.ToolBar(""Ribbon"", False)" 
Else 
    Application.ExecuteExcel4Macro "Show.ToolBar(""Ribbon"", True)" 
End If 

End Sub 
+0

Не так. Первый Sub ведет точно к результатам попытки 2, а второй Sub ведет точно к результатам попытки 1. Я не был доволен ни одним из них. –

2

Я использую это для презентаций

ActiveWindow.DisplayGridlines = False

ActiveWindow.DisplayHeadings = False

Application.DisplayFormulaBar = False

Application.DisplayFullScreen = True Это то, что я использовал, чтобы скрыть ленту

0

Я называю этот макрос на Workbook_Open, чтобы проверить на ленте и, если не скрытый, она будет скрывать ленту (я на самом деле он находится в другом Sub, который также удаляет строку формул, строку состояния, заголовки и линии сетки на Workbook_Open) ...

Sub HideRibbon() 
If CommandBars("Ribbon").Controls(1).Height < 100 Then 
Exit Sub 
Else 
    CommandBars.ExecuteMso ("MinimizeRibbon") 
End If 
End Sub 

Затем я вызываю этот макрос в Workbook_BeforeClose, чтобы проверить ленту, и если она не отображается, она покажет ленту для следующей открытой таблицы Excel.

Sub ShowRibbon() 
If CommandBars("Ribbon").Controls(1).Height > 100 Then 
Exit Sub 
Else 
    CommandBars.ExecuteMso ("MinimizeRibbon") 
End If 
End Sub 

Это исключает возможность скрыть ленту при открытии книги и затем пользователь вручную показывая ленту, которая, в свою очередь обратное шоу на самом деле близко и скрыть ленту. При открытии лента затем будет показана снова. Это будет оставаться неизменным при открытии и закрытии книги.

Смежные вопросы