首页 > 解决方案 > 如何根据工作表名称的内容创建一键宏以对选项卡进行颜色编码?

问题描述

我有一个宏可以将多个文件导入一张纸,并用合法字符给它们命名。这些文件和文件名会根据项目的需要不时变化。我想按工作表名称对工作表进行颜色编码。

所以我需要遍历所有工作表以寻找特定的短语。就像所有包含“页面”一词的工作表都将被涂成蓝色。所以页面标题重复和页面标题太长都是蓝色标签。而包含短语 H1 的页面都是红色的。所以 H1 Duplicates 和 H1 Too Long 都是红色标签。

有时标题会同时包含页面和 H1,因此我需要为此破例并选择一种独特的颜色。

我意识到我需要遍历所有工作表检查它们的存在并给出一个案例,说明名称包含什么以及我想使用什么颜色,但我似乎找不到一个不是私人的一键式宏子来完成这个。

Sub TabColor()

Sheets("canonicals missing").Tab.Color = vbBlack
Sheets("canonicals nonindexable canonic").Tab.Color = vbBlack
Sheets("h1 duplicate").Tab.Color = vbRed
Sheets("h1 missing").Tab.Color = vbRed
Sheets("h1 multiple").Tab.Color = vbRed
Sheets("h1 over 70 characters").Tab.Color = vbRed
Sheets("page titles duplicate").Tab.Color = vbBlue
Sheets("page titles missing").Tab.Color = vbBlue
Sheets("page titles over 65 characters").Tab.Color = vbBlue
Sheets("page titles same as h1").Tab.Color = vbBlue

End Sub

我选择了确切的标题路径,因为有时它们包含两个关键字,如“page”和“h1”,所以我认为最好是明确的。但是,如果这些标题不存在,那么它就会停止。标题总是会有所不同,因此无法确保任何给定批次的 .xls 文件中的标题是什么。我不知道如何遍历每张纸并检查它的存在。我对 VBA 很陌生,而且我很困惑。

标签: excelvba

解决方案


可能是这样的?

worksheets在集合上使用 for each 循环并instr在字符串中搜索字符串。

Sub test_tabcol()

Dim w As Excel.Worksheet

For Each w In ThisWorkbook.Worksheets

    If InStr(1, w.Name, "search for blue", vbTextCompare) <> 0 Then
        w.Tab.Color = vbBlue
    ElseIf InStr(1, w.Name, "search for red", vbTextCompare) <> 0 Then
        w.Tab.Color = vbRed
    Else
        w.Tab.Color = xlNone
    End If

Next w

End Sub

推荐阅读