今日也是應(yīng)讀者的需求利用VBA解決實際問題。學(xué)而不用則殆!學(xué)習(xí)了新的知識就是要不斷的利用,提升,再利用再提升。所以要給這位提問題的朋友點贊!
有的讀者問:如何利用VBA來解決Excel提示不同的單元格格式太多的問題。
首先,我們先分析一下這個情況是什么時候發(fā)生,一般有幾種情況會發(fā)生這類問題。
1、復(fù)制粘貼時,這時會提示單元格格式太多,無法粘貼,而且要經(jīng)過長時間的不知在做什么的處理過程,然后,EXCEL崩潰。你只能重啟。
2、在移動工作表時,將工作表整體從一個文件轉(zhuǎn)移到另一個工作表時,也會出現(xiàn)這個問題,現(xiàn)象和上述一樣。
3 、在篩選數(shù)據(jù)時,有時候,在篩選一個值時,往往會出現(xiàn)上述的提示,當(dāng)你按確認(rèn)鍵后,EXCEL會再次計算,好在不會崩潰,只是時間非常長,這種情況往往出現(xiàn)在這個工作表的數(shù)據(jù)量巨大,往往是1萬行以上的數(shù)據(jù)。
其次,我們分析一下上述問題產(chǎn)生的原因。其實這類問題的產(chǎn)生不是用戶的錯,而是OFFICE系統(tǒng),或者說,EXCEL從03版升級到07版之后,帶給用戶的 一個遺留問題,他們?yōu)t灑的升級完了,但留下了一堆苦果讓用戶去慢慢品嘗。為什么這么說呢?一點也不過分!03版和07版不兼容就是罪魁禍?zhǔn)住T?7版加入了很多全新的內(nèi)容,這些在03版及低版本無法顯示,才出現(xiàn)了上述的問題。
所以,當(dāng)你用07版本打開03版本;或者03版打開07版本(有兼容包);或者是往03版本拷貝07版本數(shù)據(jù);或者是往07版本拷貝入03版本數(shù)據(jù)時,極易發(fā)生上述問題。如果一個工作表的數(shù)據(jù)既有03版本的又有07版本的,那么你非常的不走運,在你篩選時,很可能就是這個結(jié)果。
問題的原因分析完了,那么怎么解決呢?
辦法一:在工作表中刷格式,采用一個格式全部的刷一遍,但也不能很好的解決問題。
辦法二:新建一個工作表,把原數(shù)據(jù)數(shù)值粘貼到新的工作表中,原來的格式全然沒有了。
辦法三:就是今天我們重點講的VBA方法:
拷入下面的代碼:
Sub KK()
2 Dim s As Style
3 Application.ScreenUpdating = False
4 On Error Resume Next
5 For Each s In ThisWorkbook.Styles
6 If Not s.BuiltIn Then s.Delete
7 Next
8 Application.ScreenUpdating = True
9 MsgBox ('OK')
10 End Sub
很簡單的幾行代碼,往往能解決很大的問題。代碼講解:
(1)Application.ScreenUpdating = False
Application.ScreenUpdating = True
上述語句是成對出現(xiàn)的,前者是關(guān)閉屏幕更新,以提高程序的效率;后者是打開屏幕刷新,
(2)On Error Resume Next
忽略錯誤,繼續(xù)執(zhí)行
(3)第五行和第七行構(gòu)成了一個FOR NEXT語句,此語句在之前的文章中講過,不過這里用的是For Each s In ThisWorkbook.Styles,翻譯過來就是說對于這個工作表中所有的格式將進(jìn)行的操作,什么操作呢?就是:
If Not s.BuiltIn Then s.Delete 執(zhí)行到這里,所有的自定義格式全部被刪除掉了。
(4)最后全部執(zhí)行完成彈出對話框:MsgBox ('OK')
看我們的代碼截圖:
剩余的工作就是,畫個按鈕,連鎖上述代碼,就可以了,經(jīng)測試,這個方法還是可行的,如有遇到這個問題的讀者可以試試看啊。
今日技巧提示:
1 Application.ScreenUpdating = False;Application.ScreenUpdating = True
的作用是什么?能否單獨出現(xiàn)?
2. On Error Resume Next 作用是什么?
3,F(xiàn)or each next 語句是否理解呢?