excelperfect
有时候,我们可能想根据用户在工作表中的选择来决定隐藏或者显示功能区选项卡中的特定组,避免用户随意使用某些功能而破坏我们的工作表结构。
下面,我们通过一个示例来演示。
我们想让用户选择工作表列B中的任意单元格时,隐藏“开始”选项卡中的“剪贴板”组,而当用户选择其他单元格时,该组又重新显示,如下图1所示。
图1:当用户选择的单元格在列B中时,“剪贴板”组隐藏,处于其他单元格中时,“剪贴板”组显示
首先,我们新建一个工作簿并保存。
然后,使用自定义UI工具打开该工作簿,输入如下所示的XML代码:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"onLoad="Initialize">
<ribbon>
<tabs>
<tab idMso="TabHome">
<group idMso="GroupClipboard"getVisible="HideClipboard"/>
</tab>
</tabs>
</ribbon>
</customUI>
如下图2所示。
图2:在Custom UI Editor For Microsoft Office中编辑输入XML
重新打开工作簿,按Alt+F11键打开VBA编辑器,插入一个标准模块,输入下面的代码:
Public rxIRibbonUI As IRibbonUI
Public bln As Boolean
'Callback for customUI.onLoad
Sub Initialize(ribbon As IRibbonUI)
Set rxIRibbonUI = ribbon
End Sub
'Callback for GroupClipboardgetVisible
Sub HideClipboard(control As IRibbonControl, ByRef returnedVal)
returnedVal = bln
End Sub
Public Function InRange(rng1 As Range, rng2 As Range)
Dim interSectRange As Range
Set interSectRange = Application.Intersect(rng1, rng2)
InRange =Not interSectRange Is Nothing
Set interSectRange = Nothing
End Function
双击工程资源管理器中的ThisWorkbook模块,在该模块代码窗口中输入下面的代码:
Private Sub Workbook_Open()
If InRange(Range(Selection.Address), Columns("B:B")) Then
bln =False
Else
bln =True
End If
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal ShAs Object, ByVal Target As Range)
If InRange(Range(Selection.Address), Columns("B:B")) Then
bln =False
Else
bln =True
End If
rxIRibbonUI.InvalidateControlMso "GroupClipboard"
End Sub
保存并关闭工作簿,然后重新打开该工作簿,试试看!效果应该如上图1中所示。
欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。