gpt4 book ai didi

vba - 使用 Excel VBA 根据每个单元格中的值自动设置行格式?

转载 作者:行者123 更新时间:2023-12-02 04:48:51 24 4
gpt4 key购买 nike

我有表1

A 列有一个日期,例如2017年5月30日

B 列具有状态,例如“成功”

C 列的值例如 500

要求:更改单元格时在 VBA 中应用自定义条件格式

假设更改发生在第 5 行的 A、B 或 C 列

无论A、B、C列是否发生变化,都应该执行相同的逻辑。

如果 A 列值小于 Now(),则第 5 行应为红色背景和白色文本。不应运行进一步的检查。

否则如果 B 列为“成功”,则第 5 行应为绿色背景和白色文本。不应运行进一步的检查。

否则,如果 C 列的值小于 500,则第 5 行应为蓝色背景和白色文本。不应运行进一步的检查。

下面的 VBA 代码用于检查单元格上的更改 - 它使用超链接自动设置 b 列中的单元格格式。

我现在需要的是根据上述条件自动设置整行的格式。

Private Sub Worksheet_Change(ByVal Target As Range)

If ((Not Intersect(Target, Range("B:B")) Is Nothing) Or (Not Intersect(Target, Range("F:F")) Is Nothing) Or (Not Intersect(Target, Range("G:G")) Is Nothing) Or (Not Intersect(Target, Range("I:I")) Is Nothing)) Then

End If

End Sub

最佳答案

试试这个代码:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Rng As Range, R As Range
Dim fCol As Long, bCol As Long

Set Rng = Application.Intersect(Target, Columns("A:C"))

If Not Rng Is Nothing Then

Set Rng = Application.Intersect(Rng.EntireRow, Columns("A:C"))
fCol = vbWhite

For Each R In Rng.Rows

If R.Cells(1, 1).Value <> vbNullString And R.Cells(1, 1).Value < Now Then
bCol = vbRed
ElseIf R.Cells(1, 2).Value <> vbNullString And R.Cells(1, 2).Value = "Success" Then
bCol = vbGreen
ElseIf R.Cells(1, 3).Value <> vbNullString And R.Cells(1, 3).Value < 500 Then
bCol = vbBlue
Else
bCol = xlNone
fCol = vbBlack
End If

R.EntireRow.Interior.Color = bCol
R.EntireRow.Font.Color = fCol

Next

End If

End Sub

编辑:

I have Table1

如果 Table1 是 ListObject ( Excel tables ) 然后我们可以修改上面的代码,使其监视该表的前三列,无论第一列从哪里开始(在“A”或“B”列等中),并仅格式化表行不是 EntireRow :

Private Sub Worksheet_Change(ByVal Target As Range)

Dim LObj As ListObject
Dim RngToWatch As Range
Dim Rng As Range, R As Range
Dim fCol As Long, bCol As Long

Set LObj = ListObjects("Table1") ' the name of the table
Set RngToWatch = Range(LObj.ListColumns(1).DataBodyRange, LObj.ListColumns(3).DataBodyRange)
Set Rng = Application.Intersect(Target, RngToWatch)

If Not Rng Is Nothing Then

Set Rng = Application.Intersect(Target.EntireRow, RngToWatch)
fCol = vbWhite

For Each R In Rng.Rows

If R.Cells(1, 1).Value <> vbNullString And R.Cells(1, 1).Value < Now Then
bCol = vbRed
ElseIf R.Cells(1, 2).Value <> vbNullString And R.Cells(1, 2).Value = "Success" Then
bCol = vbGreen
ElseIf R.Cells(1, 3).Value <> vbNullString And R.Cells(1, 3).Value < 500 Then
bCol = vbBlue
Else
bCol = xlNone
fCol = vbBlack
End If

With Application.Intersect(LObj.DataBodyRange, R.EntireRow)
.Interior.Color = bCol
.Font.Color = fCol
End With

Next

End If

End Sub

关于vba - 使用 Excel VBA 根据每个单元格中的值自动设置行格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43104920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com