ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5769|回复: 6

[分享] 可删除所有单元格的条件格式并保留结果格式的宏

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-7-11 09:53 | 显示全部楼层 |阅读模式
附档宏可将Excel具条件格式单元格的条件格式删除,结果格式(底色及字型,外框)依然保留

[ 本帖最后由 single_star 于 2009-7-22 10:36 编辑 ]

translate_formatconditions_celltype.rar

11.97 KB, 下载次数: 251

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-7-22 10:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
'***楼上附档代码公布如下(所有条件格式单元格的结果格式皆可保留)
Sub Translate_Formatconditions_Celltype()
Set range0 = Application.Intersect(Selection, ActiveCell.SpecialCells(xlCellTypeAllFormatConditions))
If range0 Is Nothing Then Exit Sub
'*************************************************
Application.ScreenUpdating = False
Dim jd(8)      'set this for 8 FormatConditionOperator
jd(1) = "=And(cell0>=for1,cell0<=for2)"    'Between
jd(2) = "=Not(And(cell0>=for1,cell0<=for2))"       'notBetween
jd(3) = "=cell0=for1"               '=
jd(4) = "=cell0<>for1"              '<>
jd(5) = "=cell0>for1"               '>
jd(6) = "=cell0<for1"               '<
jd(7) = "=cell0>=for1"              '>=
jd(8) = "=cell0<=for1"              '<=

For Each sel0 In range0
n = sel0.FormatConditions.Count
  con = 0
  For i = n To 1 Step -1
  With sel0
  sel0.Select 'use this to avoid formula wrong answer with row() or column()
'****.FormatConditions(i).Type: xlCellValue
  If .FormatConditions(i).Type = 1 Then
    s0 = sel0.Value2
    operator0 = .FormatConditions(i).Operator
    a0 = Application.Evaluate(.FormatConditions(i).Formula1)
    If operator0 = 1 Or operator0 = 2 Then
    b0 = Application.Evaluate(.FormatConditions(i).Formula2)
    If Not (IsNumeric(s0)) Or Not (IsNumeric(a0)) Or Not (IsNumeric(b0)) Then
      If IsEmpty(s0) Then s0 = ""
      If IsNumeric(s0) Then s0 = CStr(s0)
      If IsEmpty(a0) Then a0 = ""
      If IsNumeric(a0) Then a0 = CStr(a0)
      If IsEmpty(b0) Then b0 = ""
      If IsNumeric(b0) Then b0 = CStr(b0)
      Else
      If IsEmpty(s0) Then s0 = 0
      If IsEmpty(a0) Then a0 = 0
      If IsEmpty(b0) Then b0 = 0
    End If

      If a0 > b0 Then
       a1 = b0
       b1 = a0
      Else
       a1 = a0
       b1 = b0
      End If
    Else
      a1 = a0
    End If
       If Application.WorksheetFunction.IsText(s0) Then s0 = """" & UCase(s0) & """"
      If Application.WorksheetFunction.IsText(a1) Then a1 = """" & UCase(a1) & """"
      If Application.WorksheetFunction.IsText(b1) Then b1 = """" & UCase(b1) & """"
      st0 = jd(operator0)
      st = Replace(st0, "for1", a1)
      st = Replace(st, "for2", b1)
      st = Replace(st, "cell0", s0)
      If Application.WorksheetFunction.IsError(Application.Evaluate(st)) Then
        ans = False
      Else
       ans = Application.Evaluate(st)
      End If
'****.FormatConditions(i).Type:xlExpression
    Else
      If Application.WorksheetFunction.IsError(Application.Evaluate(.FormatConditions(i).Formula1)) Then
        ans = False
      Else
       ans = Application.Evaluate(.FormatConditions(i).Formula1)
      End If
    End If
  End With
  If ans = True Then con = i
  Next
'***translate celltype(Font&Interior&Borders)
If con > 0 Then
  Set s1 = sel0.FormatConditions(con).Font
  Set s2 = sel0.FormatConditions(con).Interior
  With sel0.Font
    .Bold = s1.Bold
    .Italic = s1.Italic
    .Underline = s1.Underline
    .Strikethrough = s1.Strikethrough
    .ColorIndex = s1.ColorIndex
  End With
  sel0.Interior.Pattern = s2.Pattern
  sel0.Interior.ColorIndex = s2.ColorIndex
   
  For b0 = 1 To 4
   If sel0.FormatConditions(con).Borders(b0).LineStyle <> xlNone Then
      sel0.Borders(b0).LineStyle = sel0.FormatConditions(con).Borders(b0).LineStyle
      sel0.Borders(b0).Weight = sel0.FormatConditions(con).Borders(b0).Weight
      sel0.Borders(b0).ColorIndex = sel0.FormatConditions(con).Borders(b0).ColorIndex
   End If
  Next
End If

sel0.FormatConditions.Delete
Next
Application.ScreenUpdating = True
End Sub

[ 本帖最后由 single_star 于 2009-8-3 17:31 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-7-4 01:24 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-10 10:34 | 显示全部楼层
本帖最后由 single_star 于 2012-9-10 10:41 编辑
zdqwy19 发表于 2012-9-9 07:58
我把你的代码修改成提取单元格背景色的function进程,在excel2007中,当条件格式多于2个事,返回#value,当 ...
我写的function参考帖。。。
http://club.excelhome.net/thread-477227-1-1.html


如还有问题的话,请把修改代码后的附件上传一下。。。


TA的精华主题

TA的得分主题

发表于 2012-9-9 07:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我把你的代码修改成提取单元格背景色的function进程,在excel2007中,当条件格式多于2个事,返回#value,当条件格式不多于2个时返回正常值。

TA的精华主题

TA的得分主题

发表于 2012-9-12 18:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
single_star 发表于 2012-9-10 10:34
我写的function参考帖。。。
http://club.excelhome.net/thread-477227-1-1.html

谢谢了!你的那个贴已经解决了我的问题。

TA的精华主题

TA的得分主题

发表于 2016-12-1 15:13 | 显示全部楼层
附件文件打不开怎么回事!!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-6 07:14 , Processed in 0.033774 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表