2015-11-18 1 views
2

Я программирую VBA (7.0) в Excel 2010 и пытаюсь создать макрос, который изменит строковую переменную (содержащую кандзи) в ее составляющие Хираганы. Насколько я могу судить, для этого не существует специальных методов VBA. Следовательно, я предполагаю, что это можно сделать, - попытаться подражать кнопке [henkan] 「変 換」 на японской клавиатуре.Программирование японской клавиатуры «Henkan» Кнопка 「変 換」

Для кнопок, не привыкших к японским клавиатурам, кнопка 「変 換」 используется для изменения составного Hiragana, как написано, в состав Kanji (аналогично выделяя существующий текст и нажав на него, будет предложено изменить его на другие кандзи как так как это составляющая Хирагана или Катакана). Нажатие кнопки приведет к отображению списка из IME, в котором перечислены возможные варианты выбора для вашей записи.

я собрал из here и here что сканкод кнопки в вопросе 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 (Может конвертировать хирагана <> катакана, но не кандзи)
  • Фонетика
    • .Add (Можно добавить чтение кандзи (как фуригана), однако это требует участия пользователя и не автоматический).
    • .CharacterType (Возвращает или задает тип фонетика; хирагана, катакана и т.д.)
  • IME (в основном используется для установки правила ввода)

КОЛЛЕГА предположил, что я, возможно, потребуется посмотрите на IME API, чтобы увидеть, во-первых, если я могу получить к нему доступ (разрешения с API), а во-вторых, если он даст мне знать способ доступа к ключу. Однако мой опыт работы с API (особенно IME) ничтожен.

Существует ли какой-либо VBA-способ подражания процессу кандзи -> Хирагана (требуется только одностороннее преобразование кандзи в Хирагану)?

Если этого не произошло, есть способ, который может отправить кнопку 「変 換」 и выбрать опцию Hiragana?

+0

не так просто 'Application.SendKeys (" {CONVERT} ")'? –

+0

@DirkReichel Не то, что я могу видеть. Я получаю сообщение об ошибке «Метод» SendKeys объекта «_Application»]. Если я не ошибаюсь. Вы хотите получить удар по кусочку кода? –

+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] -. Вы можете НЕ непосредственно вводит строку в эту встроенную функцию).

    • В VBA функция Application.GetPhonetic(text)

    Где [Текст] либо непосредственно вводится переменная строка или ссылка на ячейку со строкой.

  3. Предполагается, что автоматическая Хирагана требуется, поскольку кандзи введен в текстовое поле Userform.

кандзи вход TextBox => [KanjiBox], хирагана Чтение TextBox => [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 

Используя этот метод, 「変 換」 эмуляции ключа не требовалось.

Любой способ эмуляции клавиши 「変 換」 в качестве ключевого события для прессы без использования сторонних приложений по-прежнему пока неизвестен.

Смежные вопросы