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

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

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

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

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

3回答

2733閲覧

access vba からrubyのスクリプトを実行して標準出力を受け取りたい

kuri_dev

総合スコア8

VBA

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

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

0クリップ

投稿2020/03/24 05:38

access vbaでボタンを押したら、rubyスクリプトを実行して、標準出力の結果を受け取りたいです。
accessでは、Shell関数を使うとコマンドラインでの実行が出来るらしいとのことでやってみたのですが、黒い画面が一瞬立ち上がってすぐ消えるだけでなにも実行されません。何か良い方法はないでしょうか?

wshオブジェクトでも

vba

1Private Sub cmd_sample_Click() 2 '' Shellを使ったパターン 3 Call Shell("ruby " + "\c\rubytest\puts_args.rb", vbNormalFocus) 4 '' wshを使ったパターン 5 Dim wsh As Object 6 Dim ret As Long 7 Dim str As String 8 str = "ruby \c\rubytest\puts_args.rb" 9 Set wsh = CreateObject("Wscript.Shell") 10 ret = wsh.Run(str, 1, True) 11End Sub

ruby

1# puts_args.rb 2f = File.open("test_.txt", "w") 3f.puts "test" 4f.close

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

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

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

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

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

guest

回答3

0

自己解決

サンプルコード丸々ぱくりました。
変更したのは、sCmd = "cd C:\rubytest & ruby puts_args.rb"この部分のみです。
カレントディレクトリに移動するコマンドに続けて、rubyを実行するコマンドを記述することで実行できました。

Dim WSH, wExec, sCmd As String, Result As String Set WSH = CreateObject("WScript.Shell") ''(1) sCmd = "cd C:\rubytest & ruby puts_args.rb" ''(2) Set wExec = WSH.Exec("%ComSpec% /c " & sCmd) ''(3) Do While wExec.Status = 0 ''(4) DoEvents Loop Result = wExec.StdOut.ReadAll ''(5) MsgBox Result Set wExec = Nothing Set WSH = Nothing

投稿2020/03/24 06:48

編集2020/03/25 00:57
kuri_dev

総合スコア8

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

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

0

\c\rubytest\puts_args.rbが間違っていて、エラーになっているのでは?
C:\rubytest\puts_args.rbの間違いでは?

投稿2020/03/24 06:22

otn

総合スコア85901

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

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

kuri_dev

2020/03/24 06:27

回答ありがとうございます。 パスを変更して実行してもファイルの中身は実行されていないようでした。
otn

2020/03/24 06:34

そもそもRubyは実行可能ですか? shell("ruby")で黒い画面が閉じるまで表示されたままにならないのなら、Rubyが実行可能ではないです。 ・Rubyをインストールしましたか? ・PATHにRubyのインストール先の設定をしていますか?(RubyInstallerでインストールするとインストールの途中でPATHを設定するかと聞いてきたはずだが) インストールはしたが、PATHに設定をしてしなかった場合は、ruby.exeのフルパス名を指定してください。 shell("C:\ruby~~~\bin\ruby.exe C:\~~~")
kuri_dev

2020/03/24 07:00

ruby -v でインストールされたことを確認はしています。 shell("ruby")を実行すると、ruby.exeがちゃんと実行されます。 このように実行してもエラーなのか落ちます Shell ("C:\Ruby25-x64\bin\ruby.exe C:\rubytest\puts_args.rb") 自己解決の方にも上げましたが、cdコマンドで実行ディレクトリに移動するコマンドに続けてrubyを実行するコマンドを記述してあげると動きました。 こんな感じです。 Shell("cd C:\rubytest & ruby puts_args.rb")
otn

2020/03/24 07:05

> File.open("test_.txt", "w") の書き込むファイル名もフルパスで書いておくべきでしたね。
kuri_dev

2020/03/25 00:56

確かにそうでした...。アドバイスありがとうございます!
guest

0

rubyに関しては分からないですが、コマンドラインの標準出力を取得する方法は下記が参考になるかと。

Office TANAKA - Excel VBA Tips[MS-DOSコマンドの標準出力を取得する]

投稿2020/03/24 06:17

hatena19

総合スコア34075

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

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

kuri_dev

2020/03/24 06:49

ありがとうございます!参考になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問