如果单元格区域包含文本,如何为工作表选项卡指定颜色

如果单元格区域包含文本,如何为工作表选项卡指定颜色

我试过在 SE 和其他地方找到的代码,但它们并没有像我想的那样工作。我会在下面列出它们。我几乎可以肯定这是一个简单的问题。

我正在尝试做的事情:如果 A2:A100 范围内的任何单元格中有任何文本或数字,则将工作表选项卡设为黄色。我需要在 20 多个选项卡上执行此操作。

我在其他代码中遇到的问题:据我所知,它们需要编辑单元格,然后快速再次按下回车键。我尝试使用 SHIFT + F9 重新计算,但这没有效果,因为我认为这仅适用于公式。代码 1 似乎有效,尽管必须手动重新输入文本,但无论颜色值是什么,我总是得到黑色的标签颜色。

我尝试过的代码:

代码1:

Private Sub Worksheet_Change(ByVal Target As Range)
    MyVal = Range("A2:A27").Text

    With ActiveSheet.Tab
        Select Case MyVal
            Case ""
                .Color = xlColorIndexNone
            Case Else
                .ColorIndex = 6
        End Select
    End With
End Sub

代码2:这是来自堆栈溢出问题,尽管我稍微修改了代码以满足我的需求。具体来说,如果在设置范围内没有值,则保留标签颜色,否则将其更改为颜色值 6。但我肯定我做错了什么,我不熟悉 VBA 编码。

Private Sub Worksheet_Calculate()
    If Range("A2:A100").Text = "" Then
        ActiveWorkbook.ActiveSheet.Tab.Color = xlColorIndexNone
    Else
        ActiveWorkbook.ActiveSheet.Tab.Color = 6
    End If
End Sub

感谢您的帮助!

答案1

在这两种情况下,您使用的range.text都是字符串变量,它只会为您提供范围内第一个单元格中的文本,您需要更复杂的代码。如果我理解正确的话,您只是想测试您跨越的内容是否不为空并且对内容不感兴趣。以下是设置标准的一些提示:

  • 使用 worksheetfunction 获取非空单元格的数量:worksheetfunction.counta("A2:A100")>0

  • 或者使用方法转到范围内的下一个非空单元格end()

答案2

您可能需要使用以下事件:

Private Sub Worksheet_Change(ByVal Target As Range)

代替:

Worksheet_Calculate()

如果您有代码Worksheet_Calculate,如果工作表不需要重新计算(即工作表中没有带有公式的单元格),它可能不会执行


将其粘贴到您需要设置的工作表的代码窗口中:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim myRange As Range
    Set myRange = ActiveSheet.Range("A2:A100")
    If Application.WorksheetFunction.CountBlank(myRange) = 99 Then
        ActiveWorkbook.ActiveSheet.Tab.Color = xlColorIndexNone
    Else
        ActiveWorkbook.ActiveSheet.Tab.Color = vbRed
    End If
End Sub

这使用了COUNTBLANK如下函数这里

您也可以使用下面的代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim myRange As Range
    Set myRange = ActiveSheet.Range("A2:A100")
    If Application.WorksheetFunction.CountA(myRange) = 0 Then
        ActiveWorkbook.ActiveSheet.Tab.Color = xlColorIndexNone
    Else
        ActiveWorkbook.ActiveSheet.Tab.Color = vbRed
    End If
End Sub

这使用COUNTA描述的函数这里


COUNTBLANK和公式COUNTA看起来似乎是相反的。然而,我注意到了两个不同之处:

  • COUNTBLANK将具有公式但未返回任何值的单元格视为空白。COUNTA将此类单元格视为非空白。此类公式的一个简单示例为:=IF(1=1,"","test")。此公式计算结果为不返回任何值。

  • COUNTA支持不连续的单元格范围。COUNTBLANK不支持。


要在工作簿打开时更新选项卡颜色:

Worksheet_Change您可以在每个工作表代码部分的函数内使用上述相同的代码Worksheet_Calculate

或者您可以将以下内容添加到工作簿代码窗口

Private Sub Workbook_Open()
    Call Sheet1.Worksheet_Change(ActiveSheet.Range("A1"))
    Call Sheet2.Worksheet_Change(ActiveSheet.Range("A1"))
    'Add lines of code for each sheet that you need the tab colors updated for. If you need tab colors updated for ALL sheets, you can loop through the sheets and call `Worksheet_Change` as well.
End Sub

相关内容