dポイントプレゼントキャンペーン実施中!

VBAで、IMEの操作はできますでしょうか?

ひらがな → 半角英数(その逆も)

用途としては、
エクセルを開いた時にインプットボックスを使用して
パスワード認証を行うのですが、
インプットボックス表示の前にIMEを半角英数に切り替えたいと考えています。

よろしくお願いします。

OS:XP
Office:2003

A 回答 (2件)

InputBox を使う場合は、



 1. IME 操作系 API を使う方法(省略)
 2. 入力規則(Validation)を使う方法

が思いつきます。両方結構面倒かも。2.の例です。

Sub Sample()

  Dim lBackup    As XlIMEMode
  Dim bNoValidation As Boolean
  Dim sPasskey   As String
  
  ' // 英数モードにする
  With ActiveCell.Validation
    ' // あとで設定を戻せるように現在の入力規則-IMEモード
    ' // の値を退避. Validation が設定されていなければ、
    ' // 一時的に設定
    On Error Resume Next
    lBackup = .IMEMode
    If Err Then
      On Error GoTo 0
      .Add xlInputOnly
      bNoValidation = True
    End If
    On Error GoTo 0
    .IMEMode = xlIMEModeDisable ' 又は xlIMEModeAlpha
  End With
  
  ' // パスワード関係処理(エラー処理等略)
  sPasskey = InputBox("Passkey?")
  
  ' // IME の設定を戻す
  With ActiveCell.Validation
    If bNoValidation Then
      .IMEMode = xlIMEModeOn
      .Delete
    Else
      .IMEMode = lBackup
    End If
  End With

End Sub


でも、Userform の Textbox を使った方が簡単なのでは?

この回答への補足

詳しい解説、ありがとうございます。

上記のサンプルをそのまま動作させるとうまくいくのですが、
既存のコードに挿入させると
If Err Then
  On Error GoTo 0
.Add xlInputOnly
bNoValidation = True
End If
↑で必ずエラー処理に入ってしまいます。
考えられる理由は何でしょうか……?

補足日時:2007/06/21 16:09
    • good
    • 0
この回答へのお礼

すみません、補足の訂正です。

.Add xlInputOnly
bNoValidation = True

上記2行の処理に入らず、
End If
まで飛ばされてしまいます。

なぜでしょうか?

お礼日時:2007/06/21 16:15

こんにちは。



InputBox では出来ませんが、UserForm のTextBox のプロバティなら、IMEMode で可能です。
ちなみに、パスワードの場合は、PassWordChar で、* を指定します。
    • good
    • 0
この回答へのお礼

いつもありがとうございます。

ちょっとした理由もあり、テキストボックスが使用できません。
しかし、次回テキストボックスを使用する際はこちらのやり方を参考にさせていただきます。

お礼日時:2007/06/21 14:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!