【问题标题】:VBA Highlight Cells When Other Value is Present存在其他值时 VBA 突出显示单元格
【发布时间】:2018-03-30 15:05:21
【问题描述】:

当在不同的列中输入值时,我希望突出显示电子表格中的某些单元格。我意识到这可以通过条件格式来完成,但是由于公司内部的情况,我必须使用 VBA。 (电子表格被传递到另一个无法读取条件格式的程序)

每当在 L 列中输入 ANYTHING 时,我都会尝试突出显示值范围内的 11 个不同列。例如,当它在 L2 中输入日期时,然后是 C2、J2、K2 等. 以黄色突出显示。

以下是我想出的……不幸的是,当我运行宏时,什么也没有发生。我看到它运行,但我没有得到任何结果 - 甚至没有错误消息。提前感谢您花时间帮助我!

Dim rng As Range, r As Range

Set wb = ThisWorkbook
Set sht1 = wb.Sheets("From GIS")
Set sht2 = wb.Sheets("To MapCall")

Set rng = Intersect(sht2.UsedRange, Range("L:L")).Cells


For Each r In rng
    If r.Value = "" Then
        Cells(r.Row + 1, "C,J,K,Q,AI,AV,AW,AX,AY,AZ,BR").Interior.Color = RGB(255, 255, 0)

    End If
Next r

【问题讨论】:

  • 您必须使用 Cells(r.Row + 1, "C") 等 - 单独的行或设置循环。在您的 rng 行中,您也应该指定一张工作表。

标签: vba excel


【解决方案1】:

一种方法是create a union of ranges

Sub test()

    Dim Rng As Range, r As Range, uRng As Range, row As Long

    Set wb = ThisWorkbook
    Set sht1 = wb.Sheets("From GIS")
    Set sht2 = wb.Sheets("To MapCall")

    Set Rng = Intersect(sht2.UsedRange, Range("L:L")).Cells

    For Each r In Rng
        If r.Value <> "" Then
            row = r.row

            Set uRng = Union(Cells(row, "C"), Cells(row, "J"))  'Etc... Keep going with each column
            uRng.Interior.Color = RGB(255, 255, 0)

        End If
    Next r

End Sub

【讨论】:

  • 所以这越来越接近我正在寻找的东西!至少我得到了一些突出显示的单元格!看起来它只是突出显示范围区域之后的单元格。所以如果范围内的 J2 到 J10,则仅突出显示 J11。
  • 过去,如在下一行?如果是这种情况,那是因为您的代码调用了 r.row + 1。您可以删除 +1。我更新了row = r.row 的代码,而不是row = r.row + 1。看看有没有帮助。
  • 我也刚刚重读了你的问题。当L 不是空白时,您想突出显示单元格。因此,我将您的代码部分从 If r.Value = "" Then 更新为 If r.Value &lt;&gt; "" Then
  • 谢谢.. 那应该是我在查看代码时发现的东西.. 只是我整天都在看它并且事情开始融合在一起的那些日子之一:)感谢您的帮助!
【解决方案2】:

请尝试一下并将 r.Value = "" 更改为 r.Value "" 因为如果在范围内输入了某些内容而不是在空白时应用颜色。根据您的实际需要对其进行调整。我也不确定你为什么使用 r.Row + 1?这不是您想要的,请将以下代码中的 i = r.Row + 1 替换为 i = r.Row。

同时声明代码中使用的所有变量也是一个好习惯。

Dim wb As Workbook
Dim sht1 As Worksheet, sht2 As Worksheet
Dim rng As Range, r As Range, clrRng As Range
Dim i As Long
Set wb = ThisWorkbook
Set sht1 = wb.Sheets("From GIS")
Set sht2 = wb.Sheets("To MapCall")

Set rng = Intersect(sht2.UsedRange, Range("L:L")).Cells
For Each r In rng
    If r.Value = "" Then
        i = r.Row + 1
        Set clrRng = Union(Range("C" & i), Range("J" & i & ":K" & i), Range("Q" & i), Range("AI" & i), Range("AV" & i & ":AZ" & i), Range("BR" & i))
        clrRng.Interior.Color = RGB(255, 255, 0)
    End If
Next r

【讨论】:

  • 太棒了!这正是我想要的!为了澄清起见,我使用 r.Row+1 是因为我希望它跳过标题行。如果有更简单的方法可以做到这一点,我会全力以赴。我在工作中没有使用 VBA,但有人要求我为这个项目学习它。这个网站是无价的!谢谢。
  • @Rmoore 不客气!很高兴它奏效了。如果它对你有用,就坚持下去。
猜你喜欢
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-02
  • 1970-01-01
相关资源
最近更新 更多