Excel&VBA-如果选项卡名称的前三个字母=“ xxx”,则更改选项卡颜色

时间:2018-09-26 04:14:27

标签: excel vba excel-vba

Excel中VBA的新手,但是希望在我找到自己的脚时获得一些有关宏的帮助。任何帮助将不胜感激。

我有一本工作簿,我想根据标签名称为标签自动上色。我的标签/工作表名称通常是代码。我现有的一些工作表名称(例如)是:

  • CIS22ABC
  • CIS22CBA
  • NAS22XYZ
  • NAS22ZXY
  • 我的数据
  • ADMIN等

我正在尝试实现一个跨整个工作簿(即在“ ThisWorkbook”下)运行的脚本,该脚本搜索每个标签名称的前3个字母,并根据这些字母来制作标签颜色。一直都有大量的工作表被添加和删除-因此,一系列名称将不起作用。

简而言之,我希望执行以下操作:

  • 如果工作表名称的前3个字母=“ CIS”,则Tab.Color = RGB(0,255,255)
  • 如果工作表名称的前三个字母=“ NAS”,则Tab.Color = RGB(66,134,244)
  • 否则什么都不做!

同样,任何帮助都会很大。谢谢。

3 个答案:

答案 0 :(得分:2)

这将在您每次添加新工作表时自动执行。

您可以将许多事件与之关联,以使宏自动触发而无需用户干预。比我在下面使用的NewSheet事件更适合您的需求的一些值得注意的事件是SheetChangeSheetBeforeDeleteSheetActivate等。


此代码将需要放置在ThisWorkbook下的代码空间中,而不是VBE中的工作表或模块。

Option Explicit

Private Sub Workbook_NewSheet(ByVal Sh As Object)

Dim ws As Worksheet

For Each ws In Worksheets
    Select Case Left(ws.Name, 3)
        Case "CIS"
            ws.Tab.Color = RGB(0, 255, 255)
        Case "NAS"
            ws.Tab.Color = RGB(66, 134, 244)
        'Case "ABC"
            'Add as many of these as you need inbetween _
             Select Case and End Select
    End Select
Next ws

End Sub

答案 1 :(得分:1)

尝试一下:

Dim sheet As Worksheet
For Each sheet In ActiveWorkbook.Worksheets
Dim name As String
name = sheet.name

If Len(name) > 3 Then
    Dim bit As String
    bit = Mid(name, 1, 3)
    Select Case bit
        Case "CIS"

            sheet.Tab.Color = 16776960
        Case "NAS"
            'etc etc

    End Select

End If
Next

答案 2 :(得分:0)

这应该可以解决问题。首先,您需要计算所有工作表,然后逐一检查并检查前3个字母。如果是这样,您可以为它着色:

For i = 1 To Sheets.Count

   If Left(Sheets(i).Name, 3) = "CIS" Then
      Sheets(i).Tab.Color = RGB(0, 255, 255)
   End If

   If Left(Sheets(i).Name, 3) = "NAS" Then
      Sheets(i).Tab.Color = RGB(66, 134, 244)
   End If  

Next i