|
▼ハト さん:
>>UserForm1のTextBox1のIMEModeを半角カナにして
>
>これだとTextBox1への入力時だけ半角カナになるはずなんですがねえ
>フォームを開く前の入力モードは切り替わらないはずなんです
すいません、どうも再現性の低い質問だったようです。
windowsのバージョン officeのバージョンが違うもの
数台のパソコンで試しましたが、再現したりしなかったりでした。
また、設定するタイミングも
・プロパティウィンドウでIMEModeを設定する場合
・UserFormのInitialize時にIMEModeを設定する場合
・TextBox1のEnter時にIMEModeを設定する場合
でそれぞれ再現性が違いました。
>全く自信はありませんが、
>>UserForm1のTextBox1のIMEModeを半角カナにして
>これが原因だと仮定すると
>フォームに以下のコードを加えて変化があるかどうか・・・
>
>Private Sub UserForm_Initialize()
> TextBox1.IMEMode = fmIMEModeKatakanaHalf
>End Sub
>
>Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
> TextBox1.IMEMode = fmIMEModeHiragana
>End Sub
【38426】で頂いたアドバイスで、視界が開けました。
タイミングは違うのですが、まさにその考え方で解決させました
Private Sub TextBox1_Enter()
TextBox1.IMEMode = 6
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox1.IMEMode = 4
End Sub
にしました。
ただ、シート上のでのIMEModeの取得・設定の仕方が気になったので、
ついでに調べてみたのですが、
↓これで出来ると信じてた(笑)
>>Public imem As Integer
>> imem = IMEMode
>> IMEMode = imem
こうなりました・・・
Option Explicit
Public Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function ImmGetContext Lib "Imm32.dll" (ByVal hwnd As Long) As Long
Public Declare Function ImmReleaseContext Lib "Imm32.dll" (ByVal hwnd As Long, ByVal hIMC As Long) As Long
Public Declare Function ImmGetOpenStatus Lib "Imm32.dll" (ByVal hIMC As Long) As Long
Public Declare Function ImmSetOpenStatus Lib "Imm32.dll" (ByVal hIMC As Long, ByVal fOpen As Long) As Long
Public Declare Function ImmSetConversionStatus Lib "Imm32.dll" _
(ByVal hIMC As Long, ByVal fdwConversion As Long, fdwSentence As Long) As Long
Public Declare Function ImmGetConversionStatus Lib "Imm32.dll" _
(ByVal hIMC As Long, lpfdwConversion As Long, lpfdwSentence As Long) As Long
Sub test()
'入力モードの切り替え 「直接」→「ひらがな」→「半角カナ」→・・・
Dim hwnd As Long
Dim cime As Long
Dim simm As Long
Dim conv As Long
Dim sent As Long
hwnd = FindWindow(vbNullString, Application.Caption)
cime = ImmGetContext(hwnd)
simm = ImmGetOpenStatus(cime)
Call ImmGetConversionStatus(cime, conv, sent)
If simm = 0 Then
simm = 1
conv = 25
ElseIf conv = 25 Then
conv = 19
Else
simm = 0
conv = 25
End If
Call ImmSetConversionStatus(cime, conv, sent)
Call ImmSetOpenStatus(cime, simm)
Call ImmReleaseContext(hwnd, cime)
End Sub
こんな方法しかないのでしょうか?
(一通り調べたつもりですが・・・)
WorkbooksとかApplicationあたりのプロパティ
にありそうな気がするんですが・・・
|
|