今天也根据读者的要求,使用VBA解决实际问题。不学习就危险!学习新知识是不断利用、提高、回收和提高。
所以要给这位提问题的朋友点赞!有的读者问:如何利用VBA来解决Excel提示不同的单元格格式太多的问题。
首先,我们先分析一下这个情况是什么时候发生,一般有几种情况会发生这类问题。
1、复制粘贴时,这时会提示单元格格式太多,无法粘贴,而且要经过长时间的不知在做什么的处理过程,然后,EXCEL崩溃。你只能重启。
2、在移动工作表时,将工作表整体从一个文件转移到另一个工作表时,也会出现这个问题,现象和上述一样。
3 、在筛选数据时,有时候,在筛选一个值时,往往会出现上述的提示,当你按确认键后,EXCEL会再次计算,好在不会崩溃,只是时间非常长,这种情况往往出现在这个工作表的数据量巨大,往往是1万行以上的数据。
其次,我们分析一下上述问题产生的原因。其实这类问题的产生不是用户的错,而是OFFICE系统,或者说,EXCEL从03版升级到07版之后,带给用户的 一个遗留问题,他们潇洒的升级完了,但留下了一堆苦果让用户去慢慢品尝。为什么这么说呢?一点也不过分!03版和07版不兼容就是罪魁祸首。在07版加入了很多全新的内容,这些在03版及低版本无法显示,才出现了上述的问题。
所以,当你用07版本打开03版本;或者03版打开07版本(有兼容包);或者是往03版本拷贝07版本数据;或者是往07版本拷贝入03版本数据时,极易发生上述问题。如果一个工作表的数据既有03版本的又有07版本的,那么你非常的不走运,在你筛选时,很可能就是这个结果。
问题的原因分析完了,那么怎么解决呢?
办法一:在工作表中刷格式,采用一个格式全部的刷一遍,但也不能很好的解决问题。
办法二:新建一个工作表,把原数据数值粘贴到新的工作表中,原来的格式全然没有了。
办法三:就是今天我们重点讲的VBA方法:
拷入下面的代码:
Sub KK()
2 Dim s As Style
3 A = False
4 On Error Resume Next
5 For Each s In T
6 If Not s.BuiltIn Then s.Delete
7 Next
8 A = True
9 MsgBox ("OK")
10 End Sub
很简单的几行代码,往往能解决很大的问题。代码讲解:
(1)A = False
A = True
上述语句是成对出现的,前者是关闭屏幕更新,以提高程序的效率;后者是打开屏幕刷新,
(2)On Error Resume Next
忽略错误,继续执行
(3)第五行和第七行构成了一个FOR NEXT语句,此语句在之前的文章中讲过,不过这里用的是For Each s In T,翻译过来就是说对于这个工作表中所有的格式将进行的操作,什么操作呢?就是:
If Not s.BuiltIn Then s.Delete 执行到这里,所有的自定义格式全部被删除掉了。
(4)最后全部执行完成弹出对话框:MsgBox ("OK")
看我们的代码截图:
剩余的工作就是,画个按钮,连锁上述代码,就可以了,经测试,这个方法还是可行的,如有遇到这个问题的读者可以试试看啊。
今日技巧提示:
1 A = False;A = True
的作用是什么?能否单独出现?
2. On Error Resume Next 作用是什么?
3,For each next 语句是否理解呢?