• 締切済み

(vba)他のアプリケーションの右ctrlキーを押すには?

excelのvbaを使って、他のアプリケーション(3270エミュレータ)上で、実行キーに割り当てられている「右ctrlキー」または「テンキーのenterキー」を押すようにしたくて、sendkeys "^"やsendkeys "{enter}"を使ってみましたが、うまくいきません。どうしたら良いでしょうか?

みんなの回答

回答No.7

すみません!最初の回答に付けたリンク、上手く作動してませんでした!多分日本語が混じったURLだったからかもしれません。IBMのドキュメント・サーチへのリンクでしたが、ご自身でググ(Google)っていただき、前述したようにIBMのサイト右上の検索欄に「ホスト・アクセス・クラス・ライブラリー」と打って、探してみてください! ごめんなさい!

回答No.6

<最後にVBAのSendKeysについて> 「PCOMMではVBAのSendKeysは役立たずか」、と思われるかもしれませんが、PCOMMのウィンドウ・メニューへのアクセスは「VBAのSendKeys」を使わなければできません。例えば「マクロ/スクリプト再生開始」や、「ホストからファイルを受信」などの機能を使うときは、VBAのSendKeysを使用しなければいけませんので、必要となってきます。VBAのSendKeysとPCOMMのSendKeysを組み合わせれば、けっこう凝ったオートメーションができるのではないでしょうか。 長くなりましたが、以上です!

回答No.5

2. <PCOMMが提供する、クラス・ライブラリを参照する> PCOMMが提供する、クラス・ライブラリを参照する場合は、CreateObject()を使わず、VB Editorの「参照設定」をします。参照設定するにはVB Editorが開いた状態で、「ツール(T)→参照設定(R)」を選択します。参照できるライブラリーのリストが表示されるので、必要な”PCOMM”で始まるライブラリ・ファイルにチェックしてください。今回は”autECLSession”と”autECLPS”のライブラリが必要です。(PCOMMがインストールされていれば、VBAが参照できるクラス・ライブラリーがインストールされているものと思われます。自分はできました!) 参照の利点としては、クラスの持つ「メソッドやプロパティの候補一覧」がスクリプトをタイピング中にでてくることです。プログラムがしやすいです。ただ、あまりにも参照先を設定しすぎると、メモリーを使用し過ぎ、重くなるという弊害があります。でも、そこまで重くはないと思います。以下、SendKeysでENTERを入力するための例です。 ‘ここでもPCOMMの記録マクロ上のクラス名と同じ名前にオブジェクトを宣言しています。別の名前でも自分が分かれば結構です。”AutSess”と”AutPS”は、参照したPCOMMのクラス・ライブラリで定義されているもの。「...As」と入力し終えた頃に、タイプの候補が表示されてきます。    Dim autECLSession As New AutSess    Dim autECLPS As New AutPS ‘autECLSessionにコントロールしたいセッションを代入する。    autECLSession.SetConnectionByName (“A”) ‘ENTERキーを入力させる。    autECLSession.autECLPS.SendKeys “[enter]” どうでしょう?

回答No.4

1. <VBAの”CreateObject()”を使う> ‘VBAでPCOMMのクラスを使うためのオブジェクトを用意。ここではPCOMMの記録マクロが作成するVBScriptをそのまま移植できるようにするために、VBScript上のクラス名をオブジェクトの変数名にした。    Dim autECLSession As Object    Dim autECLPS As Object ‘用意したオブジェクトにPCOMMのクラスを代入する。これで、それぞれのオブジェクトはVBAでPCOMMのクラスとして扱える。IBMが提供しているPCOMMのマニュアルを見ると、下記と同じ代入方法が載っています。    Set autECLSession = CreateObject(“PCOMM.autECLSession”)    Set autECLPS = CreateObject(“PCOMM.autECLPS”) ‘autECLSessionに、現在開いているコントロールしたいPCOMMのウィンドウ・セッションの名前を代入する。PCOMMのセッション名は、PCOMMのウィンドウ・メニューの「編集(E)→設定(S)→外観(A)→ウィンドウの設定(W)」で開いたウィンドウの右上部にある「短縮セッション ID」に表示されている(自分が使っているPCOMMではそうです)。通常、一つのウィンドウだけが開いていれば、そのセッションの名前は”A”です。二つ目からは”B”、”C”、...となっていきます。複数のウィンドウが開かれている場合(プリンター画面など)に、変数を組み特定のセッションを探させるVBAの組み方もありますが、とりあえずここでは基本だけ。    autECLSession.SetConnectionByName (“A”) ‘PCOMMのSendKeysでENTERを入力してみる。VBAのオブジェクトをVBScript上のクラス名と同じ名前でつけてあるので、VBScriptで書かれた記録マクロ内のステートメントと全く同じになる。    autECLSession.autECLPS.SendKeys “[enter]” 上手くいったでしょうか?

回答No.3

これは、IBMのパーソナル・コミュニケーションズ(PCOMM)の画面上で、VBAの”SendKeys”で{ENTER}を送った際に、「改行」扱いされてしまうので、それを「入力」扱いにして欲しいといった問題でしょうか。 今頃の回答なので、すでにお役に立たないかもしれませんが、自分自身も”昨日”上記の問題にぶちあたり、いろいろと調べた結果、解決したので、その方法をシェアしたいと思います。 Excel VBAの”SendKeys”は、アプリケーションに対して有効ですが、PCOMMの画面に対して「完全に有効」な”SendKeys”メソッドは、「PCOMMのクラスが持つメソッド」を使う必要があります。 <VBAの”SendKeys”> 「SendKeys “{ENTER}”, True」 ← PCOMM(3270エミュレーター)では「改行」扱いになる。 「SendKeys “^”, True」 ← PCOMMではCtrlキーを押すと、Enter同様の扱いになるので、Ctrlキーを入力して欲しいが、修飾キーなので何も起こらない...。 そこで参考にするのが、PCOMMの記録マクロが作成するVBScriptです。 <PCOMMの記録マクロが作成するVBScript> 「autECLSession.autECLPS.SendKeys “[enter]”」 ← ちゃんと「入力」として認識してくれる。 もちろん、これはVBScriptの書き方なので、VBAのモジュールにこのまま書き込んでも何も起こりません。というかエラーになります。でも実はこの”autECLSession”と”autECLPS”は、PCOMMを外部から操作するための「クラス」であり、”SendKeys”はそのクラスの「メソッド」です。ということで、VBAで外部アプリケーションを操作する際に行う、”CreateObject”を使用して、VBAにPCOMMのクラスやメソッドを取り込めば、PCOMMをVBAで操作することが可能になります。ENTERを”SendKeys”で送るのも、PCOMMのメソッドであれば、「改行」ではなく「入力」と判断してくれます。 このPCOMMを外部から操作するためのクラスやメソッドについては、IBMのホームページ内にある「パーソナル・コミュニケーションズ バージョンJ5.X Windows ホスト・アクセス・クラス・ライブラリー」を参照ください。IBM Japanホームページ右上の検索欄に、「ホスト・アクセス・クラス・ライブラリ」と打ち、検索すると、PDFのドキュメントの一覧が表示され、見つけることができます。お使いのPCOMMのバージョンにあったものを参照するといいかもしれません。自分のは”J5.5”でした。 次にVBAでの実際のプログラム方法を紹介します。PCOMMのクラスとメソッドをVBAに取り込むには次の2つの方法があります。 1. VBAの”CreateObject()”を使う。 2. PCOMMが提供する、クラス・ライブラリ(PCOMM autECLSession Automation Object 1.0 Libraryなど)を参照する。 個人的には2番目が好きですが、一応両方紹介しておきます。文字数に制限があるので、次の回答で紹介します。

参考URL:
http://www.ibm.com/Search/?q=%E3%83%9B%E3%82%B9%E3%83%88%E3%83%BB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%BB%E3%82%AF%
  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.2

#1です。 せっかくなので5250エミュレーターでキーボードの右Ctrlを押下した実例を2パターン提示します。 いずれもエクセルVBAです。 DDEでキーワード送出し5250の機能で「実行」を押します。 サンプルコードではウィンドウタイトルが「セッションA」となっているクライアントにクリップボードからPasteし、「実行」するまでをキーボード操作だけで実現しています。 Sub ASへ貼付() AppActivate Title:="セッションA" SendKeys "%" SendKeys "ep" SendKeys "%af{tab}" For num = 1 To 24 SendKeys "{pgdn}" Next SendKeys "{down}{down}{down}{enter}" End Sub エクセルで5250マクロをVBSで書き出し、作業は5250マクロを(自動入力.MAC)コールして実現します。 コードは抜粋です。 マクロ開始位置から Tab を2回押し、変数「Mystr」の内容を入力、実行を1回押す 「5250マクロ」をエクセルで書き出します。 Const sFilePath = "C:\Program Files\Personal Communications\private\自動入力.MAC" Open sFilePath For Output As #1 Print #1, "[PCOMM SCRIPT HEADER]" Print #1, "LANGUAGE=VBSCRIPT" Print #1, "DESCRIPTION=" Print #1, "[PCOMM SCRIPT SOURCE]" Print #1, "OPTION EXPLICIT" Print #1, "autECLSession.SetConnectionByName(ThisSessionName)" Print #1, "REM This line calls the macro subroutine" Print #1, "subSub1_" Print #1, "sub subSub1_()" Print #1, "autECLSession.autECLOIA.WaitForAppAvailable" Print #1, "autECLSession.autECLPS.SendKeys ""[Tab]""" Print #1, "autECLSession.autECLPS.SendKeys ""[Tab]""" Print #1, "autECLSession.autECLPS.SendKeys """; Mystr; """" Print #1, "autECLSession.autECLOIA.WaitForInputReady" Print #1, "autECLSession.autECLPS.SendKeys ""[enter]""" 'フッター Print #1, "end sub" Close #1 MsgBox "自動入力マクロを書出しました。"

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.1

3270に直接コマンドを送るのでしょうか? 当方は5250エミュレータですがVBSマクロをエクセルVBAで書き出し、5250から実行し、画面から自動でデータ入力する操作をしています。 その際 sendkeys "データ" と " を書き出す必要があり """ のようにダブルクォーテーションをダブルクォーテーションで括る記述をしました。 参考になるでしょうか

duelist707
質問者

お礼

ご回答ありがとうございます。 よくわかりませんが、うまくいかないみたいです。 似たようなQ&Aを見ると、すごく複雑な記述をしていましたが、sendkeysのように簡単にできないものなのでしょうか?

関連するQ&A

  • Excel VBA で CTRLキーを送る方法

    EXCEL VBA で他のアプリケーションにキーをコードを送り制御したく、Sendkeys を使ってみましたが、CTRLキー(単一キー)の送信が出来ません。Sendkeys "^", 1 では無反応。 制御されるアプリは右のCTRLキーと左のCTLキーではことなった動作をします。出来れば右のCTRLキー、左のCTLキーの送信方を教えてください。 VBAで負荷でしたら、Shell関数で呼び出せるようなものはありませんでしょうか。

  • VBAでCTRLキーが押されるまで処理を待つには

    ExcelのVBAの処理で、処理結果を画面表示した後、 ユーザーが画面の内容を確認したら CTRLキーを押すと、 次の処理を続行するようにしたいのですが、 メッセージボックス(MSGBOX)などは表示しないで、 (画面表示内容以外のものは表示しないで) 処理を一時停止させて、CTRLキーが押されたら続行するには、 VBAでどのように記述すればよいでしょうか。 よろしくお願いします。(Windows10,Excel2016)

  • Ctrlキーが効かなくなりました。

    エクセルを使っていてctrlキーを押してホイールマウスを回すと 拡大縮小できたのですができなくなりました。 昨日までは問題なくできたのですが。。。 ホイールマウスの上下移動はできます。 そこで他のソフトでも試してみたのですがやはりctrlキーを使う 機能が使えませんでした。 ctrl+F(検索機能)も使えません。 ということはエクセルの設定やマウスの設定ではなく パソコンのctrlキーが壊れているということですよね? この場合やはり買い替えか修理になるのでしょうか? ctrlキーを無効にする設定などがあって知らないうちに それを設定してしまったとか…

  • Ctrlキーが効かなくなりました

    Ctrlキーが急に使えなくなりました。 午前中まで使えていたのに、午後になり急に使えなくなりました。 Ctrlキーは左・右とも両方効きません。 隣のキーはちゃんと使用できますし、右のCtrlキーは今までほとんど使用していなかったので、キーボードの故障とは思えないのですが、Ctrlキーを無効にする設定などあるのでしょうか? OSはWindows Vista HomePremiumです。 因みに、ブラウザー上でもメモパッドでもOutlookでも使用できません。

  • キーボードでctrlキーが動きません

    こんばんは。dell xps8300を使用していますが、dell純正の有線キーボードのctrlキーが作動しません。購入して約2週間程なんですが、初めてエクセルを使用しコピペ時にctrlキーが右も左も動作しない事に今気づきました。初期不良でしょうか?それとも他の理由でしょうか? どなたか、教えて頂ければ助かります。

  • Ctrlキーが押されたことの検出

    コントロールキーを押しながらコマンドボタンを押した時と、単にコマンドボタンを押した時とで、処理を変えようかと考えています。 Application.OnKey "^{}", "ctrl"で、キーを捕まえようかと考えましたが。エラーになります。 で、質問ですが、1つは、Ctrlキー、Shiftキー、Altキーを単体で押したときに任意のプロシージャーを実行することってできますか? 2つ目は、任意のプロシージャーではなく、押されているかどうかの状態のみ調べる方法ってありますか? どなたか、詳しい方教えて頂けないでしょうか?宜しくお願い致します。

  • WSHShell.SendKeysでCtrlを押しながら、数字キーの横の+をしたい

    wshを使ってキーを打ちたいのです。 打ちたいキーはCtrlを押しながら、数字キーの横の+です。 #シフト押しながら「れ」キーとは違います。 WSHShell.SendKeys この後になにを続ければよいでしょうか 教えてください。

  • キー入れ替えの時、右のCTRLキーだけを

    定番ツールを使用すれば、キーの入れ替えが可能な事は 知っていますが、以下条件は可能でしょうか? 1)右のCTRLだけ入れ替えたい。 2)CapsLockでなく「Fn」キーでも可能か? ※機種はDell 710m 宜しくお願いします。

  • Ctrlキーがずっと押された状態になる

     こんにちは、いつもありがとうござます。  VAIO PCV-LX70 を使っています。OSはWindows2000Proです。時々エクセル2000で作業をしていると、Ctrlキーがずっと押された状態になって固まってしまいます。他のキーを一つ押しても、それを「Ctrl+押したキー」と読み取ってしまい、作業が停止してしまいます。Ctrlキーを押してもESCキーを押しても解除してくれません。エクセルは会社での使用頻度が高いだけで、エクセルの問題ではないような気がします。何をやっても解除できない時と、Ctrlキーを押し続けたら解除できる時があります。前者の場合は仕方なく強制終了して再起動しています。  Ctrlキーを押してなくても押していると判断されている場合の解除方法をご存知の方、いらっしゃいませんか? キーボードは新しいのに変えても同じでした。もしかしたらマザーボートかHDがおかしいのでしょうか?  PCに詳しい友人はVAIOの欠陥だから仕方ないと言っていましたが、私もそんなにいろんな種類のPCを使ったことがあるわけではないので、そう言われるとそう思ってしまいます。  PCを買い換えないで解決方法があればご教授願います。よろしくお願いします。

  • EXCEL VBA で他のアプリケーションを開く方法について

    EXCEL VBAで他のアプリケーションを開く方法について教えていただきたいことがあります。 現在開いているエクセルのブックと同じフォルダにある、"AAA"という名称のsqc形式のファイル(EAST社のSkyLink Ver9.0のコマンドファイルです)をVBAで開く。 SHELL関数で開くと思っていたのですが、 Sub Test() Dim MyPath As String, MyTask As Double MyPath = ActiveWorkbook.Path & "\" MyTask = Shell(MyPath & "AAA.sqc") SendKeys "%FO", True End Sub とすると 「プロシージャの呼び出し、または引数が不正です」 というメッセージが出てしまいます。 如何せんSHELL関数を使うのが初めてでして、色々調べても どうしても解決策にたどり着きません。 どうぞよろしくお願いいたします。

専門家に質問してみよう