質問: ### 前提・実現したいこと excelの横書きテキストボックスでimeを強制的にONにしたいです。 ### ここに問題に対して試したことを記載してください。 ActiveSheet.Shapes("横書きテキストボックス")には、IMEModeが無いため、設定 できませんでした。 また、"横書きテキストボックス"のクリックイベントを拾って、事前にIMEをONにしよう と思いましたが、onActionにうまく組み込めませんでした。 ### 補足情報(FW/ツールのバージョンなど) windows7 32bit Pro excel 2013
回答: かなり強引な方法ですが、SendKeysを使用した例です。 ``` '図形の「マクロの登録」に設定する前提の記述 Sub IMEtoZenkakuForXlShapeOnAction() 'クリックされた図形を選択する(onActionだと選択が外れてしまうため) If Not TypeOf ActiveSheet Is Excel.Worksheet Then Exit Sub Dim ws As Excel.Worksheet Set ws = ActiveSheet If VBA.VarType(Application.Caller) <> vbString Then Exit Sub Dim clickedShpName As String clickedShpName = Application.Caller Dim clickedShp As Excel.Shape Set clickedShp = ws.Shapes.Item(clickedShpName) clickedShp.Select '全角半角を切り替える Const KeyOf半角全角 = "{kanji}" 'http://q.hatena.ne.jp/1279785772 If VBA.IMEStatus() = vbIMEOff Then Call VBA.SendKeys(KeyOf半角全角, True) End If End Sub ``` > > (VBA)VBスクリプトを利用して作業を自動化しているのですが、S... - 人力検索はてな > > > 上記のサイトから`SendKeys`を使用して全角・半角の変更ができることがわかります。 上記のコードの下半分です。 Excelの図形のOnActionは実行時に図形の選択が外れてしまうため、図形を選択し直すのがコードの上半分になります。 また、VBAのSendKeysは実行時にNumLockなどが外れっぱなしになってしまうことがあります(環境依存)。 もし発生するようなら`VBA.SendKeys`を以下のプロシージャ呼び出しに変更してください。 ``` 'VBA.SendKeys使用時にNumLockなどが外れっぱなしなるようならこちらに置き換え Sub WshSendKeys(iKeyStroke As String, Optional iWait As Boolean) Dim wsShell As Object Set wsShell = VBA.CreateObject("WScript.Shell") Call wsShell.SendKeys(keyStroke, Wait) End Sub ```