Excel Ribbon切换按钮:始终显示当前工作表页面方向状态的实现
实现同步活动工作表页面方向的Ribbon切换按钮
我们需要构建一个Ribbon ToggleButton,用于切换页面横向(Landscape)与纵向(Portrait),并且该按钮始终能正确显示当前活动工作表的页面方向状态。需要注意的是,ToggleButton控件并不支持getSelectedItemIndex回调。
以下是完整实现代码:
自定义Ribbon XML配置
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="LoadRibbon"> <ribbon> <tabs> <tab id="Tabv3.1" label="TOOLS" insertAfterMso="TabHome"> <group id="Group6" label="Views"> <toggleButton id="ToggleButton01" label="Orientation" imageMso="PageOrientationLandscape" size="large" getPressed="ToggleButton01_Startup" onAction="ToggleButton01_OnAction"/> </group> </tab> </tabs> </ribbon> </customUI>
VBA标准模块代码
Option Explicit Public RibUI As IRibbonUI Sub LoadRibbon(Ribbon As IRibbonUI) Set RibUI = Ribbon End Sub ' ToggleButton 初始化获取页面状态 Sub ToggleButton01_Startup( _ ByRef control As IRibbonControl, _ ByRef returnedVal) If ActiveSheet.PageSetup.Orientation = xlLandscape Then returnedVal = xlLandscape Else returnedVal = xlPortrait End If End Sub ' ToggleButton 点击事件处理 Sub ToggleButton01_OnAction( _ ByRef control As IRibbonControl, _ ByRef pressed As Boolean) Select Case pressed Case True ActiveSheet.PageSetup.Orientation = xlLandscape Case False ActiveSheet.PageSetup.Orientation = xlPortrait End Select End Sub
ThisWorkbook事件代码
Private Sub Workbook_SheetActivate(ByVal Sh As Object) RibUI.InvalidateControl ("ToggleButton01") End Sub
实现说明
- 通过
getPressed回调(ToggleButton01_Startup)获取当前活动工作表的页面方向,返回对应状态以初始化按钮的选中状态; - 点击按钮时触发
onAction回调(ToggleButton01_OnAction),根据按钮的选中状态切换页面的横向/纵向设置; - 借助
Workbook_SheetActivate事件,在切换工作表时调用RibUI.InvalidateControl刷新ToggleButton,确保按钮状态与新活动工作表的页面方向保持同步。
内容的提问来源于stack exchange,提问作者user23636411
相关产品推荐
相关产品推荐

