首页 > 解决方案 > 在 VBA 中更改 Multipage 选项卡的颜色

问题描述

我正在使用 VBA 中的表单,我想知道是否可以让我的 Multipages 中的选项卡在活动时更改颜色,以便与其他选项卡形成更好的对比。这是一个截图在此处输入图像描述

有没有办法将活动选项卡与非活动选项卡进行对比,以便用户知道他正在使用哪个选项卡?

或者您有什么想法可以使活动选项卡相对于非活动选项卡更好地显示?

标签: excelvbauserform

解决方案


通过复选标记标记页面标题的方法

“或者你有什么想法可以让活动选项卡在非活动选项卡上看起来更好吗?” -

一种可能且有用的方法是

  • 用复选标记(例如ChrW(&H2611)标记每个点击的页面标题,然后
  • 自动取消标记前一页标题:代码通过在任何多页事件中设置的多页属性“记住”当前/旧页面索引(首先通过初始化)。.Tag..._Change().TagUserForm_Initialize()

由于标题可能包含普通空白,我选择在复选ChrW(&HA0)标记字符中添加一个受保护的空白 ( ),以便简单地Replace()维护原始页面标题中的空白。

用户窗体中的示例代码

Private Sub MultiPage1_Change()
'Purpose: mark current page caption by a checkmark
    With Me.MultiPage1
        Dim pg As MSForms.Page
    'a) de-mark old caption
        Set pg = oldPage(Me.MultiPage1)
        pg.Caption = Replace(pg.Caption, ChkMark, vbNullString)
    'b) mark new caption & remember latest multipage value
        Set pg = .Pages(.Value)
        pg.Caption = ChkMark & pg.Caption
        .Tag = .Value                         ' << remember latest page index
    End With
End Sub

帮助功能和UserForm_Initialize()例程

Function oldPage(mp As MSForms.MultiPage) As MSForms.Page
'Purpose: return currently marked page in given multipage
    With mp
        Set oldPage = .Pages(Val(.Tag))
    End With
End Function

Function ChkMark() As String
'Purpose: return ballot box with check + blank space
    ChkMark = ChrW(&H2611) & ChrW(&HA0)  ' ballot box with check + blank
End Function

Private Sub UserForm_Initialize()
'Purpose: mark start page & remember page index
Const startIndx As Long = 0
With Me.MultiPage1
    .Pages(startIndx).Caption = ChkMark & .Pages(startIndx).Caption
    .Tag = startIndx
End With
End Sub

示例点击第二页


推荐阅读