- ベストアンサー
エクセルVBAでIME入力モードの制御方法
- エクセルVBAでIME入力モードの制御方法について教えてください。
- IMEの現在の状態を取得するための関数はIMEStatus()であり、戻り値によって異なる状態を示します。
- 逆にIMEの状態を設定するには、特定の場所やオブジェクトに対してIMEのモードを指定することができます。例えば、Sheets("AAA").Range("B1:B20")は「半角英数入力モード」にすることができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
えーっと・・・基礎はないけど実践だけで何とかやってるというレベルなんですねぇ。まぁ私も似たようなもんなんですが。 VBAの本など読まれることをお勧めしますよ。貴方の場合、全くの初心者が読むよりは遥かに得られるものがあるかと思います。 で IMEモードの切り替えがマクロに記録されない点については、IMEの管轄はエクセルではないためです。まぁそれでもコードから直接操作することは可能なんですが。 前回のマクロはデータ>入力規則からした作業をマクロで記録しただけです。細かく解説すると 特定のセル(Range("A1")とか)に 入力規則(Validation)を 追加する(Add) という意味合いなんですよ。 で「Editboxes」というのはおそらくTEXTBOXの一種ですよね。その上に入力規則を追加しようとしても反映されないのは当然で、セルにはValidationというプロパティが用意されていますが、TEXTBOXにはありません。 但しTEXTBOXはIMEmodeのプロパティを直接持っていますから TEXTBOX.IMEmode=1 というような感じで設定できます。 しかしおそらくですが、組み込みダイアログはその辺の自由度がありませんので、Editboxesのプロパティが操作できない、というか元からIMEmodeを持ってないのじゃないのかなと。 ですので最初からフォームで作れと何度も言ってる訳なんですが。今更95時代の遺産を使うのもなんですし。
その他の回答 (2)
- popesyu
- ベストアンサー率36% (1782/4883)
1番ですけど。 変更を記録してくれないとはどういう意味なんでしょうか。どういう手順でやられているんでしょうかね。 Sub Macro1() With Selection.Validation .Delete .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _ :=xlBetween :=xlBetween .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeKatakanaHalf .ShowInput = True .ShowError = True End With End Sub 普通にやったらこうなりましたよ。 でちょっと修正 Sub IME_settei() With Sheets("Sheet1").Range("A1:A10").Validation .Delete .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator :=xlBetween .IMEMode = xlIMEModeAlpha End With End Sub ・Validationまで分かっていたなら後はヘルプ読んだほうが早いです。 ・組み込みダイアログのプロパティの設定が出来ないのなら新しいフォームを作るというのは無理なのでしょうか。
お礼
ありがとうございます。 シートの選択した部分への設定はこれでうまく行きました! >変更を記録してくれないとはどういう意味なんでしょうか ツール→マクロ→新しいマクロの記録、でIMEをいじってもその操作はモジュールシートに出てこないのです。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2003/9/20 ユーザー名 : XXXX,YYY ' ' Range("F1:G4").Select End Sub って感じです。 >・Validationまで分かっていたなら後はヘルプ読んだほうが早いです。 いや、ぜんぜんわかっていないのです。ただコピペしただけ(笑) >・組み込みダイアログのプロパティの設定が出来ないのなら新しいフォームを作るというのは無理なのでしょうか。 Application.Dialogs(xlDialogOpen).Show などの組み込みダイアローグではなく、シートタブクリック→右クリック→挿入、でだせるMS EXCEL5.0ダイアローグなのです。 挿入したダイアローグシートにエディットボックスを貼り付け、 Sub IME_ひらがな() With DialogSheets("Dialog1").EditBoxes("テストエディット").Validation .Delete .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator:=xlBetween .IMEMode = xlIMEModeHiragana End With DialogSheets("Dialog1").Show End Sub とやってみましたがエラーで駄目でした。
- popesyu
- ベストアンサー率36% (1782/4883)
IMEModeプロパティを使います。 ヘルプによればシート上のそれを設定するには、入力規則を設定するやりかたしかないようです。 例文はマクロの自動記録でつくってみれば一発でわかるでしょう。 DialogSheetsは触ったことないのでわかりませんが(一昔前の組み込みダイアログですか?)Editboxesのプロパティで設定とかできないんでしょうかね? できないのなら素直に新たなフォームを作ったほうが早いんじゃないかなと。
補足
さっそくありがとうございます。 マクロの自動記録はもちろんやってみましたが、IME入力モードの変更を記録してくれません。 Sub IMEひらがな設定() Sheets("Sheet1").Range("A1:A10").Validation.IMEMode = xlIMEModeHiragana End Sub いろいろ検索して、上記もやってみましたがエラーでした。 DialogSheetsは MS EXCEL 5.0ダイアローグです。
お礼
なんどもありがとうございます。 Sub IME_ひらがな2() DialogSheets("Dialog1").EditBoxes("テストエディット").IMEMode = 4 DialogSheets("Dialog1").Show End Sub とやりましたがだめでした。「実行時エラー438 オブジェクトはこのメソッドまたはプロパティをサポートしていません」だそうです。 > 最初からフォームで作れと何度も言ってる訳なんですが。 > 今更95時代の遺産を使うのもなんですし。 ほんとにそうですね。でも残念ながらEXCEL97以降のユーザーフォームはよくわからないので使ったことがないのです。勉強しなくちゃいけませんね。 ありがとうございました。