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