【问题标题】:How to change the color of a tab based on cell value on that sheet如何根据该工作表上的单元格值更改选项卡的颜色
【发布时间】:2016-01-08 23:04:17
【问题描述】:

我的工作簿中有几张工作表。每个工作表在单元格 U2 中都有一个日期。我想让 U2 中具有工作日值的所有单元格的选项卡颜色为绿色,而在 U2 中具有周末值的工作表选项卡为黄色。我找到了如何更改选项卡的颜色,但不知道如何具体告诉它“Sheet4”选项卡颜色为绿色。我正在寻找看起来像这样的代码:

For each sht in Thisworkbook.worksheets
  If format(sht.Renge("U2"),"DDD") = "Saturday" _
    or format(sht.Renge("U2"),"DDD") = "Sunday" then
    sht.Tab.ColorIndex = "yellow"
  else
    sht.Tab.ColorIndex = "blue"
  end if
Next

这是我一直在使用的代码:

Sub sbColorAllSheetTab()
    'Declaration
    Dim iCntr, sht As Worksheet

On Error GoTo ErrorHandler

    'Holds the colorIndex number
    iCntr = 2

    'looping throgh the all the sheets of the workbook
    For Each sht In ThisWorkbook.Worksheets

        'Debug.Print Format(sht.Range("U2"), "DDD")  'Tried to check value on sheet - failed
        iCntr = iCntr + 1

        'Applying the colors to Sheet tabs - works
        sht.Tab.ColorIndex = 10 'iCntr

        'Tried to print the value, but didn't work'
        'If I can confirm it sees the correct value in the sheet I can interrogate the value
        'Debug.Print sht.Name  '.Range("U2")
        Debug.Print sht.Range("U2") 'Failed
    Next

   Exit Sub
ErrorHandler:
   ' Error handling code
   Beep
   Resume Next
End Sub

谢谢

【问题讨论】:

  • 使用If WeekDay(Range("U2")) = 7 or If WeekDay(Range("U2")) = 1 then
  • 嗨,斯科特,我认为你很接近,但没有退出。我认为问题出在每张纸上的单元格 U2 中。第一张表(名为 01)是月份的第一张,编码为 2016 年 1 月 1 日,自定义格式为 mmm,d,yyyy。第二个 sheet2 U2 是 '01'!U2+DayOfMonth-1; DayOfMonth 是 VALUE(MID(CELL("filename"),FIND("]",CELL("filename"))+1,255))。我尝试了 Value(sht.Range("U2")、CInt 和 CDbl,都不起作用。但是,当我将日期硬编码为 2015 年 1 月 2 日、2015 年 1 月 3 日等时,它可以工作。

标签: excel vba


【解决方案1】:

本着您的要求(“我正在寻找代码看起来像:”),您的代码非常接近。

我只是改变了:

  1. 您的日期格式(从“DDD”到“DDDD”)
  2. 范围的拼写错误
  3. 用整数代替选项卡颜色代替您的字符串

我要工作的最接近您的代码的是:

For Each sht In ThisWorkbook.Worksheets
  If Format(sht.Range("U2"), "DDDD") = "Saturday" _
    Or Format(sht.Range("U2"), "DDDD") = "Sunday" Then
    sht.Tab.ColorIndex = 6 'yellow
  Else
    sht.Tab.ColorIndex = 5 'blue
  End If
Next

【讨论】:

  • 感谢您的错字更正,但我遇到了同样的失败。当前四张纸上 U2 中的日期被硬编码时,它可以正常工作,但是当它是如上所述的公式 '01'!U2+DayOfMonth-1 时,它会使选项卡变为蓝色。因此,2016 年 1 月 1 日(星期五)到 2016 年 1 月 4 日(星期一)是硬编码的,并得到正确的颜色。 2016 年 1 月 9 日是星期六,所以它应该将选项卡颜色更改为黄色,但它和所有其余部分都是蓝色的。它似乎需要某种形式的转换。
  • 我做了 MsgBox Format(sht.Range("U2"), "DDDD") 并且每个有公式的工作表都作为第一个有公式的工作表出现,例如msgbox 为所有剩余的工作表显示“星期二”。硬编码的日期单元格每个都正确显示为“星期五”、“星期六”、“星期日”、“星期一”。
  • 顺便说一句,如果有人有更清洁的方法来解决这个问题,我愿意接受你的建议。
  • 如果我使用“U2”日期作为公式运行上面的代码,它仍然可以按设计工作。这告诉我您的日期公式没有计算日期,因此 IF 语句不是星期六或星期日,因此将选项卡着色为蓝色。要找出日期公式的计算结果,请将其发送到变量。我相信您会在上面的日期公式中找到问题 ('01'!U2+DayOfMonth-1)
猜你喜欢
  • 1970-01-01
  • 2020-11-06
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
  • 1970-01-01
相关资源
最近更新 更多