A 回答 (7件)
- 最新から表示
- 回答順に表示
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% …
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 "自動入力マクロを書出しました。"
No.1
- 回答日時:
3270に直接コマンドを送るのでしょうか?
当方は5250エミュレータですがVBSマクロをエクセルVBAで書き出し、5250から実行し、画面から自動でデータ入力する操作をしています。
その際 sendkeys "データ" と " を書き出す必要があり
""" のようにダブルクォーテーションをダブルクォーテーションで括る記述をしました。
参考になるでしょうか
ご回答ありがとうございます。
よくわかりませんが、うまくいかないみたいです。
似たようなQ&Aを見ると、すごく複雑な記述をしていましたが、sendkeysのように簡単にできないものなのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
見学に行くとしたら【天国】と【地獄】どっち?
みなさんは、一度だけ見学に行けるとしたら【天国】と【地獄】どちらに行きたいですか? 理由も聞きたいです。
-
フォントについて教えてください!
みなさんの一番好きなフォントは何ですか? よく使うフォントやこのフォント好きだなあというものをぜひ教えてください!
-
これが怖いの自分だけ?というものありますか?
人によって怖いもの(恐怖症)ありませんか? 怖いものには、怖くなったきっかけやエピソードがあって聞いてみるとそんな感覚もあるのかと新しい発見があって面白いです。
-
集合写真、どこに映る?
あなたが集合写真を撮られるとき、画角のどのあたりにいることが多いですか? 私は振り返ってみると右の端にいることが多い気がします。
-
【穴埋めお題】恐竜の新説
【大喜利】 考古学者が発表した衝撃の新説「恐竜は、意外にもそのほとんどが〇〇〇」 (〇〇〇に入る部分だけを回答して下さい)
-
sendkeysにてALT+CTRL+INSERTを同時に行いたい
Visual Basic(VBA)
-
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
VBAでの SendKeysの変数指定方法
Excel(エクセル)
-
-
4
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オーバーライドとラッパーの違い
-
setTextについて
-
Ftpでの帯域制限の設定方法につ...
-
【C#】クラスのコンストラクタ...
-
C# 「データが失なわれる可能性...
-
「継承されたメソッドの可視性...
-
メソッドの引数にクラス名を渡す
-
interfaceとabstract
-
委譲って何ですか?
-
親クラスのメソッドを別のパッ...
-
C#からDLLを呼びたいのですが・...
-
WindowsアプリケーションのASP....
-
(vba)他のアプリケーションの右...
-
VBがオブジェクト指向言語でな...
-
ASP.NETでの共通コードの書き方...
-
サーバー上のフォルダ情報の取得
-
インターフェイス 型変換 クラス
-
Javaでのジェネリクス型パラメ...
-
Excel vbaのプログラムでガンマ...
-
JTextFieldの入力制限
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
(vba)他のアプリケーションの右...
-
interface,extend,implementの...
-
C# 「データが失なわれる可能性...
-
「継承されたメソッドの可視性...
-
JTextFieldの入力制限
-
Javaのインスタンス化の構文の...
-
ASP.NETでの共通コードの書き方...
-
VB DLLプロジェクトについて
-
抽象クラスをJUNITでテストする...
-
【C#】クラスのコンストラクタ...
-
メソッドの引数にクラス名を渡す
-
C#からDLLを呼びたいのですが・...
-
「ラッパークラス」の存在意義...
-
vb.net 自作プロパティの削除に...
-
「IOException は対応する try ...
-
c++でのヘッダーファイルの循環...
-
JavaでのAPIの覚え方ってみさな...
-
Commons-Discovery.jarとは?
-
setTextについて
-
オーバーライドとラッパーの違い
おすすめ情報