【问题标题】:Conditional Case statement using Excel VBA code使用 Excel VBA 代码的条件案例语句
【发布时间】:2017-05-25 00:16:41
【问题描述】:

我正在尝试编写一个条件 case 语句,该语句在 excel 中的特定列中搜索特定字符串,并且当它与更改单元格背景颜色的字符串匹配时。

如果单元格为空或与字符串不匹配,则单元格不会发生任何事情。

现在我正在尝试遍历列中的每个单元格并检查所有可能的字符串值以进行比较,但它似乎不起作用。

这是我当前的代码:

Sub interiorsStatus()

Dim sh As Worksheet
Dim rw As Range


Set sh = ActiveSheet

For Each rw In sh.Rows
Select Case sh.Cells(rw.Row, "E").Value

    Case "DELIVERED"
        result = Range(rw.Row).Interior.ColorIndex = 33

    Case "READY TO ORDER"
        result = Range(rw.Row).Interior.ColorIndex = 36

    Case "ORDERED"
        result = Range(rw.Row).Interior.ColorIndex = 39

    Case "DELIVERED"
        result = Range(rw.Row).Interior.ColorIndex = 43

    Case "EXISTING"
        result = Range(rw.Row).Interior.ColorIndex = 40

    Case "ON HOLD"
        result = Range(rw.Row).Interior.ColorIndex = 48

    Case "GENERAL CONTRACTOR"
        result = Range(rw.Row).Interior.ColorIndex = 2

    Case "AV & BLINDS"
        result = Range(rw.Row).Interior.ColorIndex = 15

    Case "MILLWORK"
        result = Range(rw.Row).Interior.ColorIndex = 22

    Case Else
        result = """"

     End Select

     Exit For

      Next rw

    End Sub

【问题讨论】:

  • rw.Interior.ColorIndex = 22 可以,select case rw.cells(1,5)
  • 为什么不使用条件格式而不是宏?
  • For Each rw In sh.Rows 应该是 For Each rw In sh.USEDRANGE.Rows 否则您将检查 1,048,576 行。查找最后一个非空白行还有其他替代方法。
  • 是否声明了result?还是在任何地方使用?因为现在它似乎只是一个未声明的本地被分配然后被立即丢弃。另外,是的,Exit For 就在 Next 之前 ...将在第一次迭代后强制阻塞循环。

标签: vba excel conditional-formatting


【解决方案1】:

Exit For 行在第一次之后停止您的迭代。我想,这不是你想要的。或者您必须将其写在案例陈述中。

【讨论】:

    【解决方案2】:
    result = Range(rw.Row).Interior.ColorIndex = 40
    

    这是一个任务。它分配给result,即赋值运算符右侧表达式的值。

    Range(rw.Row).Interior.ColorIndex = 40
    

    当您在赋值运算符的右侧使用它时,这是一个布尔表达式,它的计算结果为TrueFalse。所以当ColorIndex40result 将是True,否则False

    然后result 什么也做不了。

    如果您打算实际设置 ColorIndex,请删除 result = 赋值,以将 布尔表达式 转换为赋值指令以赋值 ColorIndex

    然后还有另一个问题:您在完成第一次迭代之前明确退出循环。如果您想实际循环,请删除 Exit For

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 2022-10-18
      • 2016-01-17
      相关资源
      最近更新 更多