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

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

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

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

Q&A

解決済

2回答

10071閲覧

VBAでIPMessengerを送信したいです。

eri___21

総合スコア12

VBA

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

0グッド

0クリップ

投稿2016/12/06 07:41

VBAでIPMessengerを送信したいのですがわかりません。
エラーとかの前に構文がまったく分からないです。
VBAでIPMessengerを自動送信したいと思っています。

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

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

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

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

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

guest

回答2

0

あまりに漠然とした質問でどう回答したものかとも思いますが、とりあえず以下を見てみてはどうですか?

http://www.lbtg2.com/index.cgi?no=1483

投稿2016/12/06 08:11

ynakano

総合スコア1894

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

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

eri___21

2016/12/06 08:22

回答ありがとうございます。 教えていただいたサイトは検索して見つけたのですが、 わからなかったので質問しました。
ynakano

2016/12/06 08:37

ご自身で手を動かしてみましたか? サイトの内容はいくつかすべき事がありますが、どこで詰まったのでしょうか? また、プログラミングをどうしたらいいか分からないのはともかく、どのようなものを作りたいのか(画面はこんな感じで、ボタンを押したらこうなって、とか)のイメージはないですか? その辺の情報もなく、自分で何をしたかの記載もないと「丸投げ」と言われますよ。
eri___21

2016/12/07 00:13

おはようございます。 昨日の朝からソースを書いて動かしてはいます。 サイトで詰まっていることは、 CreateObject関数の引数の使い方がわからないことと。 obj.Send("", ip, "", tx)のコマンド番号、送信先 IP アドレス、送信先(元)ポートです。 イメージとしては、エクセル上にあるボタンを押したらIPMessageで固定文が送信できるです。
ynakano

2016/12/07 00:22

なるほど。 CreateObjectの部分は元サイトのコピペで動きませんか? 手元で試してないのですが、問題があるようには見えません。 ※エラーが出ているなら具体的に記載いただければと思います。 また、元サイトを見ると"ip"と"tx"はmss_send_ipmの引数として渡しています。 なので、ボタンクリック時に実行されるプロシジャに以下のように記載してはどうでしょうか。 a = mss_send_ipm("<ipアドレス>", "<メッセージテキスト") ※まずは動作確認としてIPアドレスとメッセージテキストを直書きする想定です。 mss_send_ipmがFunctionなのでaで戻り値を受けています。戻り値が不要ならFunctionではなくSubにして call mss_send_ipm("<ipアドレス>", "<メッセージテキスト") でもよいと思います。
ynakano

2016/12/07 00:30

うっかりしてました。 mss_send_ipmの戻り値に意味があるのですね。
eri___21

2016/12/08 00:56

おはようございます。 できたら、エクセルとIPMessengerだけで動かしたいです。 今の段階で出来ることは、IPMessengerのexeを開くことです。 しかし実装したいことは、exeを開かずにメッセージを自動(固定文)で送信することです。 今のところ方法が分からずにいます。
ynakano

2016/12/08 01:38

jawaさんの回答は読まれましたか?試しましたか? 見る限りjawaさんの回答にあるコードのコピペで動くような気がしますが。
guest

0

ベストアンサー

質問の仕方について

回答できるだけの情報が質問に記載されていないと、なかなか思うような回答がつきません。
以下のような内容が記載されていると回答しやすいです。

①実現したいこと
⇒これについては「ExcelVBAでIPMessengerを送信したい」という目的が伝わっているのでOKです。

②そのために行ったこと
⇒調べた内容や、ソースを作成したのならこれも提示しましょう。
(作りかけとかエラーで動かないものでも可)

③困っていること、行き詰ってしまったこと
⇒②を行っている中で思うようにいかない点、よくわからない点、エラーが発生する点、など詰まってしまった部分を具体的に記載しましょう。

初心者さんということですので、今後の質問で意識していただけると回答する側としても助かります。

アドバイス

ynakanoさんが紹介されているサイトを参考にされているということでしたので、そのコードをベースにアドバイスさせていただきます。

なお既読かもしれませんが、引数や戻り値の説明は、IPM_Send.DLLの配布サイトにありますのでご参考ください。
⇒参考

まず、IPMessenger送信用関数にコメントをつけてみました。
(わかりやすくするため一部処理を変更しています)

'概要:IPMessenger送信用関数 '引数:ip IPアドレス(相手先ipアドレスまたはPC名) ' :tx 送信テキスト Function mss_send_ipm(ip, tx) Dim obj As Object 'IPM_Sendオブジェクト Dim ret As Integer '戻り値(0:成功、1:送信IPアドレスが指定されていない、2:送信時に失敗、3:WinSock使用中、4:その他の失敗) 'IPM_Sendオブジェクトの作成 Set obj = CreateObject("IPM_Send.ComSend") 'メッセージ送信処理の実行 ret = obj.Send("", ip, "", tx) '引数:(コマンド番号(省略時:80020)、送信先IPアドレス、送信ポート(省略時:2425)、メッセージ) '送信処理の戻り値をこの関数の戻り値に設定 mss_send_ipm = ret 'IPM_Sendオブジェクトの解放 Set obj = Nothing End Function

次に、上記関数を呼び出すボタンの処理として、以下のような関数を作成します。

'概要:ボタンクリック処理 Function btnSend_Click() Dim strIP As String '送信先IPアドレス Dim strMsg As String '送信メッセージ Dim ret As Integer '戻り値(0:成功、1:送信IPアドレスが指定されていない、2:送信時に失敗、3:WinSock使用中、4:その他の失敗) 'IPアドレス、送信メッセージの取得 strIP = "192.168.1.1" strMsg = "こんにちは" 'strIP = ActiveSheet.Range("A1") '送信先をアクティブシートのA1セルから取得 'strMsg = ActiveSheet.Range("B1") '送信メッセージをアクティブシートのB1セルから取得 'メッセージ送信関数呼び出し ret = mss_send_ipm(strIP, strMsg) '結果判定 If ret = 0 Then Msgbox "メッセージを送信しました" Else Msgbox "メッセージ送信に失敗しました" End If End Function

使い方のイメージはこんな感じになると思います。

※手元にIPMessengerを動かせる環境がないため机上のコードです。
※そのままでは動かない部分があるかもしれませんが、ご容赦ください。

参考になれば幸いです。

投稿2016/12/07 02:19

編集2016/12/07 02:22
jawa

総合スコア3013

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

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

eri___21

2016/12/08 00:27

おはようございます。 ソース拝見しました。 ありがとうございます。 実を言うと、特にサイトは参考にはしてかったんです。 できたら、エクセルとIPMessengerだけで動かしたのです。 今の段階で出来ることは、IPMessengerのexeを開くことです。 しかし実装したいことは、exeを開かずにメッセージを自動(固定文)で送信することです。 今のところ方法が分からずにいます。
jawa

2016/12/08 01:24

>今の段階で出来ることは、IPMessengerのexeを開くことです。 自分の勝手な認識では、IPM_Send.DLLとは、IPMessengerの画面以外からIPMessengerのメッセージ送信機能を利用するためのDLLなのだと思われます。 (動作環境もなく、参考文献も見当たらないため勝手な推測ですが。) ynakanoさん提示のサイトにも 「IP Messengerはスタートアップに指定しておいてください。」 と記載されています。 おそらくメッセージの送信・受信にはIPMessengerが利用されるため、IPMessengerが(普通にメッセージをやり取りできる状態で)動いていることは前提条件なのではないでしょうか。 送ったメッセージは相手PCのIPMessengerで受信され、それに対する返信はこちらのIPMessengerで受信するような流れになるのだと想像しています。 推測ばかりで話してしまっているので、はずしていたらすみませんm(__)m >できたら、エクセルとIPMessengerだけで動かしたのです。 とりあえず提示した2つの関数をExcelVBAで実装し、シート上に用意したボタンにbtnSend_Clickマクロを割り当ててみてください。 (コード中のstrIPの値は、存在する端末のIPに設定してください) #ここまででわからないことがあればその旨ご連絡ください。 IPMessengerを常駐した状態で、エクセルシートから送信ボタンをクリックすれば、メッセージ送信できないでしょうか?
eri___21

2016/12/08 01:52

返信ありがとうございます。 ボタンを押下すると実行時エラー429が表示されます。 デバックすると、 Function mss_send_ipm(ip, tx)のSet obj = CreateObject("IPM_Send.ComSend")にカーソルが移動します。
jawa

2016/12/08 02:56

CreateObject("")が実行時エラー429(ActiveXオブジェクトが生成できない)で怒られるということは、IPM_Send.DLLが利用可能な状態になっていないように思います。 ynakanoさん提示の参考サイト(http://www.lbtg2.com/index.cgi?no=1483)に記載されているような事前準備はできていますか? 特に(2)の作業が正しくできていない場合に現在のエラーがでそうな気がします。 regsvr32はDLLをレジストリに登録する作業なので、管理者権限がないとエラーになりますが、このあたり大丈夫でしょうか?
eri___21

2016/12/08 04:14

こんにちは。 ynakanoさん提示の参考サイトでは、 IP Messenger、IPM_Send.dll、VB6ランタイムの3点がインストールされていますよね? 出来れば、IP Messengerとエクセルだけでやりたいのですが無理なんでしょうか?
jawa

2016/12/08 05:15 編集

IPM_Send.dllを利用したくない、ということでしょうか? ExcelからIPMessengerを制御する際に橋渡しをしてくれるのがIPM_Send.dllですので、これをインストールせずにVBAからIPMessengerをまともに制御することはできないと思います。 そして、VB6ランタイムはIPM_Send.dllが内部で利用しているMsWinSck.ocx,WinSkJp.DLLを提供するものなので、これもIPM_Send.dllを利用する場合は不可欠ということになります。 それでもどうしてもIPM_Send.dllを利用したくない!ということでしたら、力技になりますが、起動中のIPMessengerのウィンドウハンドルを取得してSendKeyでキー操作を送りつけるという方法も可能かもしれません。 (IPMessengerがキーボード操作だけで「送り先の指定」や「メッセージ送信」を行えるのであれば、という条件が付きます。) 制御するというよりキーボード操作を偽装して送りつけるようなイメージですので、あまりオススメできるとは言い難いです。 使えるのならIPM_Send.dllを利用したいですね。
eri___21

2016/12/08 05:29

ありがとうございます。 IP Messengerとエクセルだけではできないのですね。 IPM_Send.dllが利用できるかわからないので確認を取ってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問