【发布时间】: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() 代码。