除非注明,文章均為 戰(zhàn)戰(zhàn)如瘋 原創(chuàng),轉(zhuǎn)載請保留鏈接: http://www./cat4/559.html,VBA交流群273624828。
之前我分享過一個取漢字拼音首字母的函數(shù),利用的是查字庫的方法,但是最近使用時發(fā)現(xiàn)字庫中的錯誤太多,導(dǎo)致其實用性大打折扣,在網(wǎng)上又查到了一種比較好的解決方案來跟網(wǎng)友分享下。
該方案是Excelhome網(wǎng)友的作品,原帖地址http://club./thread-229924-1-1.html,要求電腦上安裝有微軟拼音,該自定義函數(shù)功能強大,不僅可以用來取首字母,更可以用來顯示全部拼音,甚至可以帶聲調(diào)。
請首先確認(rèn)安裝了微軟拼音輸入法,如果出現(xiàn)注音錯誤的情況,可嘗試安裝最新版本微軟拼音解決。
[12.01.29]更新 解決看柳絮飄揚提出的bug,全部都是非漢字情況不會再顯示#Value,同時非中文字符間也不再插入分隔符。
[11.09.29]更新 根據(jù)dul版的分析,加入了運行環(huán)境檢查,沒有運行環(huán)境的話會提示安裝微軟拼音。
[11.09.23]更新 4年來不斷有人問多音字的問題,這次更新終于解決了,由于寫了這個函數(shù)之后我就從來沒用到過,遇到些問題就放下了,一拖就這么久,要不是不斷有人給我發(fā)消息可能就不會再有這次的更新了,還要感謝大家的使用和督促,讓各位久等了。 更新后,“重慶重要”能夠正確解析為“chóng qìng zhòng yào” 。 這次重寫了很多代碼,沒有過多測試不知道有沒有bug,發(fā)現(xiàn)bug的同學(xué)請給我發(fā)消息,謝謝。 代碼在32位Win7 + Office2010和WinXp + office2010測試通過,64位的系統(tǒng)應(yīng)該會出錯,就不要測試了。以前遇到過2010下寫的VBA代碼在之前版本運行會報未找到庫之類的錯誤,代碼 中注意了,但仍可能會有遺漏,總之,請大家反饋意見,讓這個小函數(shù)更好的為大家服務(wù)。
'*************************************************************************** '* '* Module: HzToPy '* Update: 2011-09-23 '* Author: tt.t '* '* Description: 將中文字符串轉(zhuǎn)換為拼音,就這些。原先這里寫了太多廢話,刪了。 '* '* Theory: 原理依然是通過IFELanguage接口實現(xiàn)。 '* 唯一需要解釋的是如何解決多音字正確注音的問題。 '* IFELanguage接口是能夠正確返回很多多音字拼音的,但多音字的讀音只有特定詞匯中 '* 才能確認(rèn),因此在解析拼音時候不能把詞拆成單字,否則多音字返回的拼音就很可能不對。 '* 之前版本中就是因為把詞拆開獲取拼音導(dǎo)致多音字拼音錯誤。 '* 這次的更新利用接口返回數(shù)據(jù)中標(biāo)識每個拼音長度的數(shù)組實現(xiàn)了對返回拼音 '* 的按字拆分,無需再把詞拆成字獲取單個字的拼音,從而解決了多音字問題。 '* 需要說明的是,VB_MORRSLT結(jié)構(gòu)就是MS文檔中的MORRSLT結(jié)構(gòu),但是VBA自定義結(jié)構(gòu) '* 無法實現(xiàn)不按4字節(jié)對齊,使得不得不修改MORRSLT的定義方式,能這樣修改只能說運氣不錯, '* 因為被修改的部分剛好獲取拼音用不到。 '* '* Histroy: '* 2011-09-23 '* ● 重寫主要代碼,支持多音字,提高了運行效率。 '* ● 取拼音首字時,ao, ai, ei, ou, er作為首字而不是原來的第一個字母。 '* ● 為函數(shù)增加了注音方式選擇,hàn可以顯示為han或han4。 '* ● 函數(shù)的使用與之前版本兼容,將模塊中函數(shù)代碼和HZ2PY類代碼覆蓋之前版本即可實現(xiàn)升級,無需修改文檔中的公式。 '* 2011-04-07 '* ● 更正CoTaskMemFree傳遞參數(shù)錯誤,消除了Win7等環(huán)境下崩潰。 '* 2007-04-03 '* ● 更正redim時vba數(shù)組默認(rèn)起始值錯誤。 '* 2007-04-02 '* ● 最初版本,實現(xiàn)了由漢字獲取拼音。 '* '***************************************************************************
漢字轉(zhuǎn)拼音舉例:重慶重要1234,澳門
顯示用空格分開的拼音 公式: =HzToPy($b$14," ") 結(jié)果: hàn zì zhuǎn pīn yīn jǔ lì : chóng qìng zhòng yào 1 2 3 4 , ào mén 顯示用-分開的拼音,同時不顯示注音符號 公式: =HzToPy($b$14,"-",false) 結(jié)果: han-zi-zhuan-pin-yin-ju-li-:-chong-qing-zhong-yao-1-2-3-4-,-ao-men 顯示用空格分開的拼音,不顯示注音符號,同時僅顯示拼音的首字,并大寫 公式: =HzToPy($b$14, " ", false,true,false) 結(jié)果: H Z ZH P Y J L : CH Q ZH Y 1 2 3 4 , AO M 顯示用空格分開的拼音,不顯示注音符號,同時僅顯示拼音的首字母,并大寫 公式: =HzToPy($b$14 ," ", false,true, true) 結(jié)果: H Z Z P Y J L : C Q Z Y 1 2 3 4 , A M
附件下載地址:http://pan.baidu.com/s/1hqswD6W。
|