質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

標準出力

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1121閲覧

VBAのモジュール間でのオブジェクトの引き渡しについて

x86

総合スコア7

標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

標準出力

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/08/01 03:48

よろしくお願いします。
VBAでモジュール間でのオブジェクトの引き渡しですが、

Public Obj As Object Sub ボタン1_Click() Set sh = CreateObject("WScript.Shell") cmd = "nslookup" Set ex = sh.Exec("%ComSpec% /c " & cmd)    Set Obj = ex End Sub

一度処理を抜け以下のコード処理を行うと実行時エラーになります。
これはどうしてなのでしょうか?

命令の仕様なのでしょうか?それとも回避できるのでしょうか?
VBAの知識が乏しくわかりません。
ご教授していただければ幸いです。よろしくお願いいたします。

ちなみに、
Result = ex1.StdOut.ReadLine
はエラーになりません。

Sub ボタン2_Click() Set ex1 = Obj ex1.StdIn.WriteLine "www.google.co.jp"  ←実行時エラーとなる End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

odataiki

2021/08/01 06:52

実行時エラーの内容を質問文に追記することと、 質問者さんの環境をもう少し詳しく書くことは可能ですか? ExcelVBA(←EXCELではなくWORDやACCESS?)で開示されたコードを実行しましたが 私の環境では実行時エラーは発生しませんでした。
x86

2021/08/01 09:21

ありがとうございます。 excelはoffice 2019でosはwin10です。 あとは何を書けばよろしいでしょうか? やはり、実行時エラーとなります。
x86

2021/08/01 10:17

実行するとエラーとして 実行エラー'2147024664’ WiteLineメソッドは失敗しました’ITextStreamオブジェクト と表示されます。
jinoji

2021/08/01 10:52

Option Explicit はつけていますか? ボタン1_Click()と ボタン2_Click()は同じモジュールに書いていますか。
x86

2021/08/01 11:22

ありがとうございます。 別のボタンの押下時にしたいので、違うモジュールです。 WriteLineはできないのでしょうか?
jinoji

2021/08/01 11:40

Public Obj As Object の1行が標準モジュール上にあるかかどうかを気にしています。
x86

2021/08/01 11:50 編集

ありがとうございます。 以下の様に、ボタン1_Clickの外にパブリックとしてあります。 これは、命令の仕様上できないのでしょうか? しかし、ReadLineが出来るのが不思議です。 Public Obj As Object Sub ボタン1_Click()
guest

回答1

0

ベストアンサー

『ボタン1』をクリックして出てきたコマンドラインの画面を消してから『ボタン2』をクリックしてるだけじゃないでしょうか?

受け付けるプログラムが終了してしまえば、それに対して標準入力を送ろうとしても当然エラーになります。
一方で、既に書き出されていてまだ読み取っていない標準出力は読み取る側が閉じるまで残りますから、ReadLineできます。

投稿2021/08/01 16:23

ishina_yum

総合スコア509

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

x86

2021/08/02 04:52

考えてみればそうですね。 ありがとうございました。 また、お願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問