【问题标题】:VBA to Clear a content of a cell if another cell is changed or cleared while KEEPING conditional formatting rules如果在保持条件格式规则时更改或清除另一个单元格,则 VBA 清除单元格的内容
【发布时间】:2018-10-17 16:31:11
【问题描述】:

我已经用谷歌搜索了这个问题,但我似乎无法在任何地方找到正确的答案。我是 VBA 新手,如果我的问题听起来很愚蠢,请原谅。

我在工作表部分有一个 VBA 代码。

当单元格 E13 被更改或清除时,单元格 Q13 被清除。类似地,如果 E14 被更改或清除,则单元格 Q14 被清除。这一直到第 499 行。 这也适用于 E3 和 Q3。 请注意,Q3 的条件格式规则不同于 Q13-Q499 的条件格式规则。此外,Q13-Q499 共享相同的条件格式规则。

但是,在第 13-499 行,当 E 列中的单元格(例如 E20)被清除时,这会更改其在 Q 列中的相关单元格的条件格式规则,即 Q20。由于某种原因,清除 E20 似乎适用于 Q20 的 Q3 条件格式规则。

谁能帮我调整代码,使它能像现在这样工作,同时还能保持我的条件格式规则?

这可能会有所帮助。这是我在 Q 列中的条件格式规则。

第三季度: Q3 默认填充颜色为“蓝色”,默认边框为“所有边框”。 1) 如果 E3="Company",将 Q3 的填充颜色更改为“白色”,并将边框保持为“所有边框”。 2) 如果 Q3“公司”,保持填充颜色为“蓝色”,并将边框改为“左边框”。

Q13-Q499 Q13-Q499 的默认填充颜色为“白色”,默认边框为“所有边框”。 1) 如果 Q13-Q499="Company",则填充颜色为“白色”,边框为“所有边框”。 1) 如果 Q13-Q499“公司”,将 Q13-Q499 的填充颜色更改为“灰色”,并将边框更改为“左右边框”。

我使用的 VBA 代码如下。它粘贴在工作表部分:

Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .Column = 5 Then
            Rem Clear Columns Q
            .Cells.Offset(, 12).ClearContents

            Rem Enable Events after changes
            Application.EnableEvents = 1

          End If: End With
          End If
          End Sub

我想我刚刚发现了问题所在。我在模块中粘贴了一个 Sub Copyrow() 代码。它用于在单击按钮时将一组单元格的内容复制到我的电子表格的最后一个非空白行中。由于单元格 Q3 具有更改其颜色的条件格式规则,它似乎正在复制 Q3 的条件格式也。您能否修复我的代码,以便仅在复制 Q3 时,该代码仅“粘贴特殊”值而不是所有内容。这是我的模块代码:

Option Explicit

Sub copyRow()
Dim ws As Worksheet
Dim lRow As Long

' define which worksheet to work on, i.e. replace Sheet1 with the name of 
your sheet
Set ws = ActiveWorkbook.Sheets("1. Clients Details")

' determine the last row with content in column D and add one
lRow = ws.Cells(Rows.count, "D").End(xlUp).Row + 1

' copy some cells into their ranges
ws.Range("D3:F3").Copy ws.Range("D" & lRow)
ws.[D1].Select

' combine G3, H3, I3, J3 and copy into column E, next empty row
ws.Range("G" & lRow) = ws.[G3] & " " & ws.[H3] & ", " & ws.[I3] & " " & ws.
[J3] & " "

' copy the other cells into their ranges
ws.Range("K3:P3").Copy ws.Range("K" & lRow)
ws.[K1].Select

' combine G3 & H3
ws.Range("Z" & lRow) = ws.[G3] & " " & ws.[H3]

' combine I3, J3
ws.Range("AA" & lRow) = ws.[I3] & "       " & ws.[J3]


' copy Q3 into column Q only, if Q3 = "Company"
If Worksheets("1. Clients Details").Range("E3").Value = "Company" Then
ws.Range("Q3").Copy ws.Range("Q" & lRow)


End If
ActiveSheet.Cells(Rows.count, "D").End(xlUp).Activate
End Sub

【问题讨论】:

  • 我没有看到任何会影响条件格式的内容。
  • Excel 有许多条件格式的自动自我更正,所有这些都试图猜测你想要什么。因此,您应该仅在不再对图纸设计进行更改后应用 CF。在添加行的工作表中,即使仅在最后,我也不建议使用 CF,除非您可以在每次更改后使用 VBA 完全重置它,在这种情况下,应用您想要的格式而不是更容易要求 Excel 为您完成。无论如何,在 CF 中查找故障,而不是在您的代码中。
  • 大家好。谢谢你的cmets。我确实按照你的建议检查了我的公式 Variatus,我做了一些改变,但仍然没有运气。但是,当我更改 VBA 代码时,它确实有效。我将在答案中发布新宏。再次感谢:)
  • 哦,它还在做同样的事情。我以为我已经修好了。对不起
  • 我刚刚发现了我们的问题。我在模块中粘贴了一个 Sub Copyrow() 代码。

标签: vba excel


【解决方案1】:

将这行代码ws.Range("Q3").Copy ws.Range("Q" & lRow) 替换为您的CopyRow 过程底部附近的这行代码:

`ws.Range("Q" & lRow).Value = ws.Range("Q3").Value'

【讨论】:

  • 我不知道这种变化是如何工作的,但它确实奏效了。非常感谢Variatus。你让我开心!!
  • 一个单元格是一个Range,它有很多很多的属性。当您复制一个单元格并制作另一个单元格时,另一个单元格将继承所有许多属性,例如字体、字体大小和字体颜色、背景颜色、框架和框架颜色等等。帮助您的代码仅获取 Q3 的一个属性并将其分配给目标 all 的同名属性。没有触及其他属性。它可能会帮助您意识到Value 属性可能与Formula 属性不同。祝你有美好的一天!
  • 感谢 Varitaus!好东西:)
  • @Varitaus。你好,Variatus。我能不能麻烦你再给我调整一下上面的代码,特别是这部分:'结合G3,H3,I3,J3并复制到E列,下一个空行ws.Range(“G”&lRow)= ws.[G3] & " " & ws.[H3] & ", " & ws.[I3] & " " & ws. [J3] & " "
  • 如果G3、H3、I3和J3留空,点击按钮将其复制到J的最后一行。这似乎使J中的单元格不为空,即使它实际上是空白(我认为这是因为代码中的“”)。这让我烦恼的原因是,如果 J 不为空,我在 D 列的所有单元格中都有一个条件公式,以黄色突出显示。 (即“”)。
猜你喜欢
  • 2020-02-17
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多