
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 "データ" と " を書き出す必要があり
""" のようにダブルクォーテーションをダブルクォーテーションで括る記述をしました。
参考になるでしょうか
この回答へのお礼
お礼日時:2009/06/24 21:16
ご回答ありがとうございます。
よくわかりませんが、うまくいかないみたいです。
似たようなQ&Aを見ると、すごく複雑な記述をしていましたが、sendkeysのように簡単にできないものなのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(IT・Webサービス) AutoHotKeyで、キーボードにマウスの右クリックを割り当てられる? 1 2023/03/30 00:23
- マウス・キーボード テンキーの設定がおかしくなっています。 5 2023/08/09 15:35
- その他(パソコン・周辺機器) PCの操作中に画面がフリーズしましたマウスを動かしても反応しないし「Ctrl」キーと「Alt」キーと 2 2022/04/17 10:09
- Word(ワード) ワードに貼ってあるURLが開かなくて困っています. Ctrl」キーを押しながら右クリックしても全く開 4 2022/04/30 22:40
- その他(コンピューター・テクノロジー) 画面がおかしい 3 2023/03/26 07:50
- デスクトップパソコン Windows11でスクショする方法がわかりません。 調べましたが、どうもWindowsキーがあるキ 8 2022/06/05 05:37
- その他(IT・Webサービス) Google日本語入力の操作方法 一度確定した後の訂正方法 1 2023/06/17 16:03
- Mac OS MacBook Airに外付けテンキー(有線)を接続しましたが、認識してくれません。 MacBook 2 2022/10/08 19:10
- マウス・キーボード Tabキーとテンキーが右側にあるワイヤレスキーボード を探しています。 仕事上数字を入力することが多 3 2022/09/22 21:13
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ひとつのインターフェースで...
-
「インターフェイス」って何の...
-
VB DLLプロジェクトについて
-
(vba)他のアプリケーションの右...
-
携帯電話のflashについて
-
インターフェース型の使い方が...
-
C# 「データが失なわれる可能性...
-
Commons-Discovery.jarとは?
-
JAVA:抽象クラスとインタフェ...
-
継承について
-
オブジェクト指向の壁
-
javaの「型」がよくわかりません。
-
サーバー上のフォルダ情報の取得
-
Ftpでの帯域制限の設定方法につ...
-
ゲッターを使わないで変数にア...
-
JTextFieldの入力制限
-
javaのクラスの分け方について...
-
「継承されたメソッドの可視性...
-
メソッドの引数にクラス名を渡す
-
C# 継承の問題で programに示さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB DLLプロジェクトについて
-
(vba)他のアプリケーションの右...
-
【C#】クラスのコンストラクタ...
-
メソッドの引数にクラス名を渡す
-
C# 「データが失なわれる可能性...
-
C#からDLLを呼びたいのですが・...
-
「IOException は対応する try ...
-
c++でのヘッダーファイルの循環...
-
ファイルパスが取得出来ない(P...
-
「ラッパークラス」の存在意義...
-
抽象クラスをJUNITでテストする...
-
ASP.NETでの共通コードの書き方...
-
interface,extend,implementの...
-
「ひとつのインターフェースで...
-
javanoリストのオブジェクト作...
-
オーバーライドとラッパーの違い
-
System.Collections.Generic.Li...
-
VBがオブジェクト指向言語でな...
-
compareToにおける「自然順序付...
-
Commons-Discovery.jarとは?
おすすめ情報