2015-11-18 27 views
2

我在Excel 2010中編程VBA(7.0),並試圖製作一個將字符串變量(包含漢字)變成平假名成分的宏。據我所知,沒有VBA特定的方法來做到這一點。因此,我假設要去嘗試模仿日文鍵盤上的[henkan]「換換」按鈕。編程日文鍵盤「恆康」按鈕

對於那些不習慣日文鍵盤的人來說,「変換」按鈕用於將成文平假名寫入時改爲日文漢字(同樣突出顯示現有文字並按下它將提供將其改爲其他漢字的選項,以及它的組成平假名或片假名)。按下該按鈕將顯示來自IME的列表,列出您輸入的可能選項。

我從herehere聚集所討論的按鈕的掃描碼爲79

把1 + 1一起(獲得3),並試圖在以下代碼沒有產生任何結果。

Private Sub test_Click() 
    Sheets("Main").Range("A1").Select '<--- A1 contains a Kanji Compound 
    Application.SendKeys (79) '<--- Both (79) and ("79") were tried 
End Sub 

我注意到有以下VBA函數(最終可能會與最終的結果幫助),但他們似乎並沒有幫助的情況。

  • 中StrConv(可以轉換平假名<>片假名,但不是漢字)
  • 語音
    • 。新增(可以增加漢字的閱讀(如閱讀)然而,這需要用戶輸入,不自動)。
    • .CharacterType(返回或設置語音類型;平假名,片假名等)
  • IME(主要是用於設置輸入規則)

甲同事建議我可能需要首先查看IME API,看看是否可以訪問它(使用API​​的權限),其次是讓我知道訪問密鑰的方式。不過,我在API(尤其是IME)方面的經驗卻一無所獲。

是否有VBA特定的方式來模擬漢字 - >平假名過程(只需要單向漢字平假名轉換)?

失敗了,是否有一個過程可以發送「変換」按鈕並選擇平假名選項?

+0

是不是簡單'Application.SendKeys(「{轉換}」)'? –

+0

@DirkReichel不是我能看到的。我得到[Method'SendKeys of object'_Application'failed error]。除非我寫錯了。你是否想用一段代碼刺穿答案? –

+0

是一個LOOONG時間前...我記得像它是一個特殊的關鍵像'{UP}'...需要再次搜索...可能需要一段時間(我仍然記得發現,就像地獄)也是爲VB而不是VBA:/ –

回答

1

儘管我不喜歡回答我自己的問題,但我找到了一個解決方案。

爲了使Excel [PHONETIC]功能正常工作,必須安裝[日文編輯工具]。這些可以在語言包中找到(Excel 2010中每個包含25美元),也可以通過安裝日語語言Microsoft Office [2010]安裝盤來找到 - 只需將工具安裝到英文Office版本即可(這樣可以減少對完整的日文版安裝)。

未能安裝[日語編輯工具]將意味着[PHONETIC]函數將始終包含空格字符串(除非在語法上不正確),用於內嵌和VBA函數。

完整步驟如下。

  1. 安裝Microsoft Office日文編輯工具爲您的Microsoft Office版本(MO2010>安裝JET MO2010版)

  2. 使用【拼音】功能。

    • 這可以被用來作爲一種在細胞功能與格式

    =Phonetic(reference)

    其中[參考]是一個小區,即,名稱[A2] - 可以NOT直接輸入一個字符串到這個內嵌函數中)。

    • 在VBA的功能是Application.GetPhonetic(text)

    其中[文本]或者直接輸入時,一個字符串變量或一個小區的參考用的字符串。

  3. 假設自動平假名被要求作爲漢字輸入到一個用戶窗體文本框。

漢字輸入文本框=> [KanjiBox],平假名閱讀文本框=> [YomiBox]

Private Sub KanjiBox_Change() 
    'Finds last entry in Range (for this example, range is in the [B] column) 
    lastEntry = Sheets("Entries").Range("B1048576").End(xlUp).Row 
    'Finds if entry already exists in range, if it does;_ 
    launches MsgBox Warning and clears all fields. Range starts from Row 7. 
    For entryRow = 7 To lastEntry 
     If KanjiBox = Sheets("Entries").Range("B" & entryRow) Then 
      MsgBox "There is already an entry for " & KanjiBox 
      KanjiBox = "" 
      YomiBox = "" 
      Exit For 
     End If 
    Next entryRow 
    'This sets the [YomiBox] as a Hiragana reading of the Kanji_ 
    (Uses StrConv to change the Phonetic result from Katakana to Hiragana) 
    YomiBox = StrConv(Application.GetPhonetic(KanjiBox), vbHiragana) 
    'The following fixes leftover reading text when backspacing 
    If KanjiBox = "" Then 
     YomiBox = "" 
    End If 
End Sub 

使用這種方法,「変換」是不需要鍵仿真。

仿效的「変換」鍵的按鍵事件,而無需使用第三方應用程序的任何的辦法仍然是,到目前爲止,還由我不得而知。