Kees的工作表广泛使用条件格式。

但是,当用户复制和粘贴信息或使用拖放操作编辑工作表时,条件格式会变得一团糟。他想知道防止这种情况发生的最佳方法。

发生这种情况是因为条件格式仅被认为是格式。标准复制和粘贴(或拖放编辑)

复制所有内容,包括格式化。这意味着目标单元格将具有源单元格的格式,而不是目标单元格的格式(包括目标单元格中​​可能存在的任何条件格式)。

答案是告诉用户不要进行标准的复制和粘贴。

相反,他们应该使用粘贴选项粘贴除格式以外的所有内容(或所有内容)。

当然,另一种选择是保护工作表,以便用户无法复制和粘贴任何内容。但是,对于您的用户而言,这可能有点麻烦,因为您可能希望他们进行更改。 (您只是不想让他们弄乱条件格式。)

这导致了宏观方法。如果您可以记录将条件格式应用于单元格的宏,则可以根据需要创建一些其他宏,以将所记录的宏应用于该单元格。例如,假设您记录的宏称为SetCondFormat之类的简短而性感的东西。

接下来,进入Visual Basic编辑器,然后在“立即”窗口中输入以下内容:

? Cells.SpecialCells(xlCellTypeAllFormatConditions).Address

假设您已设置所有条件格式,这将返回一行(也许是一长行),该行显示使用条件格式的单元格和范围的地址。看起来像这样:

$B$3:$B$50,$D$3:$D$50,$G$3:$I$20

接下来,将以下宏添加到ThisWorksheet代码模块中:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim r As Range

Const cCFAddress = "$B$3:$B$50,$D$3:$D$50,$G$3:$I$20"



On Error Resume Next     Set r = Range(cCFAddress)

On Error GoTo 0

If r IsNot Nothing Then         If Application.Intersect(Target, r) IsNot Nothing Then             SetCondFormat         End If     End If End Sub

此处的关键是确保将cCFAddress常量设置为等于在“即时”窗口中看到地址时返回的值。 (如果以后要更改条件格式,则可以再次使用“立即”窗口技巧,而只需更改上述宏中的行即可。)

每当工作表中有更改时,都会执行该宏。它检查更改的地址(传递给Target变量)是否为包含条件格式的原始单元格的一部分。如果是这样,则将再次执行SetCondFormat(您记录下来的用于进行条件格式化的记录)。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(4362)适用于Microsoft Excel 2007、2010、2013和2016。