これまでで一番「情けなかったとき」はいつですか?

エクセルVBAでIME入力モードの制御について教えてください。

Sub IMEの現在の状態()
状態 = IMEStatus()
MsgBox 状態 & "です", vbInformation, "IMEの現在の状態"
End Sub

これでIMEStatus関数の戻り値が
1 オンの状態
2 オフの状態
4 全角ひらがな入力モード
5 全角カタカナ入力モード
6 半角カタカナ入力モード
7 全角英数入力モード
8 半角英数入力モード

であることがわかりましたが、逆にIMEの状態を設定するにはどのように記述すればいいのでしょうか?

たとえば、Sheets("AAA").Range("B1:B20")は「半角英数入力モード」にする場合。
DialogSheets("GGG")のダイアローグを呼び出したとき、その中のEditboxes("HHH")には「全角ひらがな入力モード」。

などです。
よろしくお願いします。

A 回答 (3件)

えーっと・・・基礎はないけど実践だけで何とかやってるというレベルなんですねぇ。

まぁ私も似たようなもんなんですが。
VBAの本など読まれることをお勧めしますよ。貴方の場合、全くの初心者が読むよりは遥かに得られるものがあるかと思います。


IMEモードの切り替えがマクロに記録されない点については、IMEの管轄はエクセルではないためです。まぁそれでもコードから直接操作することは可能なんですが。
前回のマクロはデータ>入力規則からした作業をマクロで記録しただけです。細かく解説すると
特定のセル(Range("A1")とか)に
入力規則(Validation)を
追加する(Add)
という意味合いなんですよ。

で「Editboxes」というのはおそらくTEXTBOXの一種ですよね。その上に入力規則を追加しようとしても反映されないのは当然で、セルにはValidationというプロパティが用意されていますが、TEXTBOXにはありません。
但しTEXTBOXはIMEmodeのプロパティを直接持っていますから
TEXTBOX.IMEmode=1
というような感じで設定できます。

しかしおそらくですが、組み込みダイアログはその辺の自由度がありませんので、Editboxesのプロパティが操作できない、というか元からIMEmodeを持ってないのじゃないのかなと。
ですので最初からフォームで作れと何度も言ってる訳なんですが。今更95時代の遺産を使うのもなんですし。
    • good
    • 0
この回答へのお礼

なんどもありがとうございます。

Sub IME_ひらがな2()
DialogSheets("Dialog1").EditBoxes("テストエディット").IMEMode = 4
DialogSheets("Dialog1").Show
End Sub
とやりましたがだめでした。「実行時エラー438 オブジェクトはこのメソッドまたはプロパティをサポートしていません」だそうです。

> 最初からフォームで作れと何度も言ってる訳なんですが。
> 今更95時代の遺産を使うのもなんですし。

ほんとにそうですね。でも残念ながらEXCEL97以降のユーザーフォームはよくわからないので使ったことがないのです。勉強しなくちゃいけませんね。
ありがとうございました。

お礼日時:2003/09/21 00:55

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まで分かっていたなら後はヘルプ読んだほうが早いです。
・組み込みダイアログのプロパティの設定が出来ないのなら新しいフォームを作るというのは無理なのでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございます。
シートの選択した部分への設定はこれでうまく行きました!

>変更を記録してくれないとはどういう意味なんでしょうか

ツール→マクロ→新しいマクロの記録、で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

とやってみましたがエラーで駄目でした。

お礼日時:2003/09/20 12:16

IMEModeプロパティを使います。


ヘルプによればシート上のそれを設定するには、入力規則を設定するやりかたしかないようです。
例文はマクロの自動記録でつくってみれば一発でわかるでしょう。

DialogSheetsは触ったことないのでわかりませんが(一昔前の組み込みダイアログですか?)Editboxesのプロパティで設定とかできないんでしょうかね? できないのなら素直に新たなフォームを作ったほうが早いんじゃないかなと。

この回答への補足

さっそくありがとうございます。

マクロの自動記録はもちろんやってみましたが、IME入力モードの変更を記録してくれません。

Sub IMEひらがな設定()
Sheets("Sheet1").Range("A1:A10").Validation.IMEMode = xlIMEModeHiragana
End Sub

いろいろ検索して、上記もやってみましたがエラーでした。

DialogSheetsは MS EXCEL 5.0ダイアローグです。

補足日時:2003/09/19 15:58
    • good
    • 1

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A