Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


516 / 13645 ツリー ←次へ | 前へ→

【79925】Sendkeysで制御文字と全角文字が送れない 山田 18/5/26(土) 16:41 質問[未読]
【79926】Re:Sendkeysで制御文字と全角文字が送れない 亀マスター 18/5/26(土) 22:52 回答[未読]
【79933】Re:Sendkeysで制御文字と全角文字が送れない 山田 18/5/29(火) 21:48 お礼[未読]
【79934】Re:Sendkeysで制御文字と全角文字が送れない 亀マスター 18/5/29(火) 22:40 回答[未読]
【79942】Re:Sendkeysで制御文字と全角文字が送れない 山田 18/5/30(水) 23:11 お礼[未読]
【79944】Re:Sendkeysで制御文字と全角文字が送れない 亀マスター 18/5/31(木) 18:57 回答[未読]
【79951】Re:Sendkeysで制御文字と全角文字が送れない 山田 18/6/4(月) 20:55 お礼[未読]
【79954】Re:Sendkeysで制御文字と全角文字が送れない 亀マスター 18/6/4(月) 22:30 発言[未読]
【79960】Re:Sendkeysで制御文字と全角文字が送れない 山田 18/6/5(火) 19:29 お礼[未読]

【79925】Sendkeysで制御文字と全角文字が送れない
質問  山田  - 18/5/26(土) 16:41 -

引用なし
パスワード
   別のアプリケーションにSendkeysでキーイベントを送ろうとしています。
通常のSendkeysでは送れなかったため、
With CreateObject("Wscript.Shell")
 .SendKeys "ABC{TAB}", True
End With
で送ろうとしました。

半角の英数字は送れたのですが、TAB等の制御文字が反応せず、全角文字は文字化けしてしまいました。
制御文字や全角文字を送るにはどうしたらよいでしょうか。

【79926】Re:Sendkeysで制御文字と全角文字が送れ...
回答  亀マスター  - 18/5/26(土) 22:52 -

引用なし
パスワード
   SendKeysで全角文字がうまく送れないというのは割とよくあることのようです。

対応方法としては、クリップボードに必要な文字を送り、それから Ctrl+Vで貼り付けるというのがいいようです(対象のアプリケーションでの貼り付け操作がCtrl+Vの場合)。

Sub test()

  'Microsoft Forms 2.0 Object Libraryへの参照設定が必要
  '参照設定したくないならCreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")で
  With New MSForms.DataObject
    .SetText "あいうえお"
    .PutInClipboard
  End With

  With CreateObject("Wscript.Shell")
   .SendKeys "^v", True
  End With

End Sub

Tabがうまく働かなかった理由ははっきりと言えませんが、対象のアプリケーションで、普通にTabキーを押すとTab文字が挿入されるのでしょうか。
Tabはカーソルの移動でもよく使いますので、そういう動作になっていませんか?SendKeysの{Tab}は特殊文字としてのTabを挿入する機能ではなく、単にTabキーを押すという役割ですので。

【79933】Re:Sendkeysで制御文字と全角文字が送れ...
お礼  山田  - 18/5/29(火) 21:48 -

引用なし
パスワード
   返信ありがとうございます。

クリップボードから貼り付けようとしましたが、失敗しました。
Ctrl+vで貼り付けができないアプリケーションのようです。

Tabキーは押すと次のコントロールに移るアプリケーションです。
次の項目へフォーカスを移そうとして"{TAB}"を送りました。
しかし、そのままでした。

【79934】Re:Sendkeysで制御文字と全角文字が送れ...
回答  亀マスター  - 18/5/29(火) 22:40 -

引用なし
パスワード
   うーむ、難しいですね。

Ctrl+Vでの貼り付けができないとありましたが、対象とアプリケーションでは貼り付けのショートカットキーはないのでしょうか。あるなら、それをSendKeysで試してみてください。
あと、貼り付けがうまくいかなかったコードを実行した直後、メモ帳などでCtrl+Vを普通にキーボードから入力した場合、きちんと指定した文字列を貼り付けることはできるでしょうか。

Tabキーで次のコントロールに移るアプリケーションなのにSendKeysの{TAB}でうまくいかないというのは…何なんでしょうね。一応確認ですが、プログラム実行時に対象のアプリケーションはアクティブになってますよね?

そもそもの目的である、制御文字としてのTabを送るのであれば、vbTabなどの定数を送ればいいと思います。ただ、クリップボードからの貼り付けができるというのが前提ですが…。
もしくは、アプリケーションによってはShft+TabやCtrl+Tabで制御文字としてのTabを入力できることもありますので、確認してみてください。

【79942】Re:Sendkeysで制御文字と全角文字が送れ...
お礼  山田  - 18/5/30(水) 23:11 -

引用なし
パスワード
   返信ありがとうございます。

メモ帳には貼り付けできています。
アプリケーションに貼り付けのショートカットキーがあるかどうかはわかっていません。
ないかもしれません。


複数のテキストボックスがあり、1つに入力を終えるとTABキーを押して次のテキストボックスに移って入力をしています。
それと同じことしたくて、TABキーを送ろうとしています。


言葉がたらずすいません。

【79944】Re:Sendkeysで制御文字と全角文字が送れ...
回答  亀マスター  - 18/5/31(木) 18:57 -

引用なし
パスワード
   貼り付けができませんか…。
ショートカットキーでの貼り付け以外でだと、右クリックメニューからの貼り付けなどどうでしょうか。
右クリックメニューはShift+F10で出せますので、これを送った後、括弧書きで書かれている貼り付けに対応するキーを押すということで。
例えば、メモ帳だと右クリックすると「貼り付け(P)」と表示されるかと思いますが、この「P」を入力することで貼り付けができます。それをSendKeysで再現しようというわけです。
対象のアプリケーションで入力中に右クリックをしてみて、どのキーが貼り付けに対応しているかを確認してみてください。

Tabに関してはちょっと対応方法が思いつかないですが、Tabの前に他のキーを連続して押していませんか?SendKeysは連続で使うとアプリケーション側が反応する前に次のキーを送信してしまうことがあるので、試しにひとつのキーを送信する度にSleepか何かで時間を空けてみてはどうでしょう。

あと、VBAのSendKeysではなく、ShellスクリプトのSendKeysも試してみてはどうでしょうか。VBAではうまくいかなくても、Shellならうまくいくということもあるようです。ShellのSendKeysは
With CreateObject("Wscript.Shell")
  .SendKeys "A"
End With
のような感じで使えます。

【79951】Re:Sendkeysで制御文字と全角文字が送れ...
お礼  山田  - 18/6/4(月) 20:55 -

引用なし
パスワード
   右クリックメニューに貼り付けがありますが、グレーアウトしていて選択できないようになっていました。

With CreateObject("Wscript.Shell")で
{TAB}単独、{ENTER}単独で送ってみましたが無反応でした。

【79954】Re:Sendkeysで制御文字と全角文字が送れ...
発言  亀マスター  - 18/6/4(月) 22:30 -

引用なし
パスワード
   うーむ…ちょっとお手上げかもです。
右クリックメニューで貼り付けがグレーアウトしているということは、あなたが使おうとしている環境では貼り付け操作が禁止されているということですかね…。(一応、貼り付けられるものがクリップボードにない場合もグレーアウトする可能性がありますので、メモ帳などで適当なものをコピーしてから右クリックメニューを開くというのも確認してみてください)。

一応、SendKeysで全角文字を送る際、入力対象となるテキストボックスなりにフォーカスが当たってないと失敗するそうなので、明示的にフォーカスを当ててから実行するとか。(Officeソフト以外のアプリケーションでフォーカスを当てる方法は知らないので、自力でお願いします)
ht tp://madia.world.coocan.jp/vb/vb_bbs2/200301/200301_03010008.html

あと、これも私は使ったことがありませんが、SendMessageやPostMessageという関数もあるようです。

【79960】Re:Sendkeysで制御文字と全角文字が送れ...
お礼  山田  - 18/6/5(火) 19:29 -

引用なし
パスワード
   色々とありがとうございました。
Sendmessageを試してみます。

516 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free