Программирование японской клавиатуры Henkan 変 換 」button

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

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

Я взял из здесь и здесь, что скан-код рассматриваемой кнопки - 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 (может преобразовывать хирагану ‹> катакана, но не кандзи)
  • Phonetics
    • .Add (Can add the reading of the Kanji (as Furigana) however this requires user input and is not automatic).
    • .CharacterType (возвращает или задает тип фонетики; хирагана, катакана и т. Д.)
  • IME (в основном используется для установки правил ввода)

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

Существует ли специфичный для VBA способ эмуляции процесса кандзи -> хирагана (требуется только одностороннее преобразование кандзи в хирагану)?

В противном случае, существует ли процесс, который мог бы отправить клавишу 「変 換」 и выбрать вариант хираганы?


person The Wandering Coder    schedule 18.11.2015    source источник
comment
разве это не просто Application.SendKeys ("{CONVERT}")?   -  person Dirk Reichel    schedule 18.11.2015
comment
@DirkReichel Не то, чтобы я мог видеть. Я получаю [Ошибка метода "SendKeys объекта" _Application "]. Если только я не пишу неправильно. Вы хотели получить ответ с помощью небольшого кода?   -  person The Wandering Coder    schedule 18.11.2015
comment
было ДЛИННОЕ время назад ... я помню что-то вроде того, что это был специальный ключ, например _1 _... нужно искать его снова ... может потребоваться время (я все еще помню, что это было чертовски похоже), также было для VB и не VBA: /   -  person Dirk Reichel    schedule 18.11.2015
comment
@DirkReichel Это нормально, если на это потребуется время. Пока я доберусь туда в конце. Это сократило бы почти 2 часа входной работы в день. Работать с чем-нибудь японским и пытаться кодировать это всегда очень сложно.   -  person The Wandering Coder    schedule 18.11.2015
comment
попробуйте {VK 23}   -  person Dirk Reichel    schedule 18.11.2015
comment
Боюсь, никаких кубиков. Я получаю ту же ошибку.   -  person The Wandering Coder    schedule 18.11.2015
comment
хмм .... вы можете проверить orlando.mvps.org/SendKeysMore.asp   -  person Dirk Reichel    schedule 18.11.2015
comment
Я посмотрю и расскажу, как все прошло.   -  person The Wandering Coder    schedule 18.11.2015
comment
Я также помню, что настройка клавиатуры должна быть в режиме хираганы ... я поиграю с ней снова ... если я снова получу решение, я вернусь   -  person Dirk Reichel    schedule 18.11.2015
comment
Я нашел функцию Application.GetPhonetic () в VBA, но она выдает пустые строки (). Если бы это сработало, то на этот вопрос был бы ответ.   -  person The Wandering Coder    schedule 18.11.2015
comment
я пока откажусь ... извините ... я все еще уверен, что это был особый ключ, но я не могу вспомнить ... извините   -  person Dirk Reichel    schedule 18.11.2015


Ответы (1)


Хотя я не люблю отвечать на свои вопросы, я нашел решение.

Для правильной работы функции Excel [PHONETIC] необходимо установить [Japanese Editing Tools]. Их можно найти либо в языковом пакете (который для Excel 2010 стоит 25 долларов США за каждый), либо при установке с установочного диска Microsoft Office [2010] на японском языке. Возможна простая установка инструментов в английскую версию Office (что снижает потребность в полная установка японского издания).

Невозможность установить [Японские инструменты редактирования] будет означать, что функция [PHONETIC] ВСЕГДА будет содержать пустую строку (если она не является синтаксически неправильной) как для функций в ячейках, так и для функций VBA.

Полные шаги следующие.

  1. Установите инструменты редактирования Microsoft Office для японского языка для вашей версии Microsoft Office (MO2010> Установить JET MO2010 edition)

  2. Используйте функцию [PHONETIC].

    • This can be used as an in-cell function with the format

    =Phonetic(reference)

    Где [ссылка] - это имя ячейки, например [A2] - вы можете НЕ напрямую вводить строку в эту функцию внутри ячейки).

    • В 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

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

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

person The Wandering Coder    schedule 24.11.2015