Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Home Premium : Excel 2010)
IMEで全角カタカナモードにする
投稿日時: 18/09/09 18:38:25
投稿者: shimoichimabu

現在、VBAでWEB操作を行っています。
ツールバーは半角英数でAと表示されています。
これを全角カタカナmodeにしたいのですが、手動では「変換」キーの右隣に位置する
 
カタタナ
ひらがな
ローマ字
 
のボタンを押し、ひらがなmodeにし、更に
無変換ボタンを何回か切り替えると、全角カタカナmodeになります。
 
ツールバーのIMEmode変更はVBAのコードではSendkeysあるいは敷居が高いAPIを使って行うのでしようか?
 
CreateObject("WScript.Shell").SendKeys "{kana}", True では出来ませんでした。

回答
投稿日時: 18/09/09 19:40:49
投稿者: WinArrow
投稿者のウェブサイトに移動

どの入力用オブジェクトを対象にするのでしょうか?
 

セルに入力させたいのでしたら、
入力規則で対応できます。(VBAは必要ない)
 
 
 
 

投稿日時: 18/09/09 20:10:13
投稿者: shimoichimabu

WinArrow様いつもお世話になっています。
 
>どの入力用オブジェクトを対象にするのでしょうか?
 
WEB上の入力欄です。

回答
投稿日時: 18/09/09 20:26:20
投稿者: WinArrow
投稿者のウェブサイトに移動

shimoichimabu さんの引用:
WinArrow様いつもお世話になっています。
 
>どの入力用オブジェクトを対象にするのでしょうか?
 
WEB上の入力欄です。

 
コレだけでは、何がオブジェクトなのかわかりませんよ!

回答
投稿日時: 18/09/09 20:28:57
投稿者: WinArrow
投稿者のウェブサイトに移動

そのオブジェクトに
IMEModeプロパティがありますか?

回答
投稿日時: 18/09/09 20:57:47
投稿者: WinArrow
投稿者のウェブサイトに移動

>現在、VBAでWEB操作を行っています。
 
もしかして、ExcelVBAでIEを起動しているのかしら?
IEのINPUTタグの操作のことであるならば、
↓のページが参考になると思います。
 
https://hole.sugutsukaeru.jp/archives/31

投稿日時: 18/09/09 22:09:10
投稿者: shimoichimabu

>もしかして、ExcelVBAでIEを起動しているのかしら?
 
はい、そうです。
 
>そのオブジェクトに
IMEModeプロパティがありますか?
 
よくわかりませんが、「要素の検査」で入力欄を確認すると、
<input name="ext-comp-1056" class="x-form-text x-form-field jan-ime-active x-box-item" id="ext-comp-1056" style="margin: 2px; left: 284px; top: 8.5px; width: 160px;" type="text">
となっていました。
 
むしろ、オブジェクトうんぬんといいより、
単純にツールバーのIME入力モードをVBAで全角カタカナに設定したいのですが・・・・。
ということは、WindowsをVBAで操作するということになる?

回答
投稿日時: 18/09/09 22:31:32
投稿者: WinArrow
投稿者のウェブサイトに移動

紹介したページは参考になりませんか?
 
紹介のぺーじは、Inputタグ(オブジェクト)のIMEModeプロパティをJavascriptでセットしている例です。
 
Inputタグが複数ある時は、JavaScriotで共通化できますが、
もちろんInputタグの中に直接してすることも可能です。
 
↓のようなキーワードで検索すると
いろいろな設定の方法があることが分かります。
 
なお、IMEmodeプロパティは、オブジェクト単位に設定するものです。
 
1INPUTタグが複数あるとき、全体で設定できてしまうと、
半角にしたいINPUTタグは困ると思いますよ!

回答
投稿日時: 18/09/09 22:43:38
投稿者: WinArrow
投稿者のウェブサイトに移動

INPUTタグのIMEModeプロパティは、半角/全角の設定は指定かのうですが、
「全角カタカナ」という指定はできないようです。
 
JavaScrioptで、入力した文字コードを解析して変換するロジックが必要かもしれませんね?

回答
投稿日時: 18/09/10 11:46:50
投稿者: TAKA君

 VBAから入力するってことですか?
 
 入力するとこ = StrConv(StrConv(入力する文字, vbKatakana), vbWide)
 
 頓珍漢なこと言ってたらすみません。。。

回答
投稿日時: 18/09/10 15:06:43
投稿者: WinArrow
投稿者のウェブサイトに移動

> VBAから入力するってことですか?
 
HTMLのINPUTタグは、WEBページでテキストデータを入力させるためのもの(オブジェクト)なんで、
たぶん、違うと思います。
 
質問者さんの希望は、
入力用のテキストボックス(今回はINPUTタグ)には、
動的(カーソルが移動したとき)でも、政敵(あらかじめ設定しておく)
どちらでも設定することができます。
 
設定は、「全角モード」「半角モード」「変更不可(半角のみ)」のいづれかです。
「全角モード」の中の種類(カタカナ、ひらがな等)は設定できないようです。
(IEのバージョン、CSSバージョンに依存するかも?)
今回は、IEのバージョンの説明がないので、ご自分で確かめてください。
 
 
「全角モード」「半角モード」は初期値ですから、
操作する人が勝手にモードを変更することができます。(阻止はできません)
 
ですから、「全角カタカナ」を所望するならば、OnChangeイベントで内容を確認して
必要ならば変換、拒否するなどの対応が必要です。
 
>ツールバーのIMEmode変更はVBAのコードではSendkeysあるいは敷居が高いAPIを使って行うのでしようか?
ツールバーではなく正しくは「言語バー」です。
 
Sendkeysでできるのは、「全角モード」と「半角モード」の切り替えだけです。
 
ExcekVBAで、記述すると
If IMEStatus = vbIMEModeOff Then Sendkeys "{kanji}"
この意味は、
「全角モード」でなかったら、「全角モード」にする
ということです。

回答
投稿日時: 18/09/10 16:32:29
投稿者: WinArrow
投稿者のウェブサイトに移動

 
自動で、「全角カタカナ」にすることは難しいけど
一つの対応策として
   
      If IMEStatus = vbIMEModeOff Then
          SendKeys "{kanji}"
      End If
      If IMEStatus <> vbIMEModeKatakana Then
          MsgBox "「カタカナ」キーに切り替えてください。([Shift]+[カタカナ])"
      End If
 
これは、あくまでもExcelVBAの範疇であることなんで、
但し、どのようなタイミングで実行するかは、わかりません。
 

投稿日時: 18/09/11 00:01:25
投稿者: shimoichimabu

 WinArrowさん、TAKA君さん、貴重なご意見ありがとうございます。
 
>INPUTタグのIMEModeプロパティは、半角/全角の設定は指定かのうですが、
 「全角カタカナ」という指定はできないようです。
>Sendkeysでできるのは、「全角モード」と「半角モード」の切り替えだけです。
 
↑の貴重な情報ありがとうございます。
 
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
 
 Set objIE = CreateObject("Internetexplorer.Application")
 
  objIE.Visible = True
 
  strUrl = "https://*****/******/"
 
  objIE.navigate strUrl
   
  SetForegroundWindow (objIE.hWnd)
   
  Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE
      DoEvents
  Loop
   
  Sleep 1000
  DoEvents
   
  CreateObject("WScript.Shell").SendKeys "{TAB}", True ←タブで記入欄へ移動
 
 If IMEStatus = vbIMEModeOff Then
     CreateObject("WScript.Shell").SendKeys "{kanji}", True
 End If
 
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
 
今、わかったのですが、タブでWEB上の記入欄へ移動し、そこでひらがなで入力しても薬品名の検索が可能でした。薬品名専用検索サイだったので、カタカタでないと検索してくれないと思っていましたが、とんだ取り越し苦労でした。
したがって、結果的にはSendKeys "{kanji}"のみでOKでした。
 
ちなみにSendkeysにはCreateObject("WScript.Shell")を付けた方がいいですか?

回答
投稿日時: 18/09/11 11:20:06
投稿者: WinArrow
投稿者のウェブサイトに移動

>ちなみにSendkeysにはCreateObject("WScript.Shell")を付けた方がいいですか?
 
CreateObject("WScript.Shell")をつけなかった場合、
VBAライブラリを参照することになるので
どちらでも良いでしょう。
あまりこだわるところではないですね・・・
 
  
 

投稿日時: 18/09/11 22:48:59
投稿者: shimoichimabu

WinArrowさん回答ありがとうございます。
 
>VBAライブラリを参照することになるので
 どちらでも良いでしょう
 
ちょっと、気になったので。安心しました。