エクセルのb2に入力されている内容を
マクロボタンを押すことで
サイボウズの掲示板へ入力したいのですが、
そのようなことは可能でしょうか?
バーションはCybozu® Garoon® Version 3.0.3となります。
どうぞよろしくお願いいたします。
API でやる方がスマートだと思いますが、とりあえず IE の実装例です。
発言したい掲示板の書き込み画面を一度手動で表示し、その時のURLを★の次行に
書いて実行してください。
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) '// ★掲示を書き込む URL Const boardWriteURL = "http://192.168.1.1/cgi-bin/cbgrn/grn.exe/bulletin/send?cid=4" Const WAIT_TIME_OUT = 15 Sub SendBoardMessage() Dim objIE Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate boardWriteURL objIE.Visible = True If WaitReadyState(objIE, "掲示を書き込む") = False Then MsgBox "掲示板が表示できません" objIE.Quit Exit Sub End If '//☆1 タイトルを入れる objIE.document.getElementsByName("title")(0).Value = Range("B1").Value MsgBox "タイトルを書きました。" Sleep 300 '//☆2 内容を入れる objIE.document.getElementsByName("data")(0).Value = Range("B2").Value MsgBox "本文を書きました。" Sleep 300 '//☆3 「掲示する」をクリック '// objIE.document.getElementsByName("send")(0).Click '// ボタンの名前で検索 Dim objs, o Set objs = objIE.document.getElementsByTagName("input") For Each o In objs If o.Value = "書き込む" Then o.Click MsgBox "保存しました。" Exit Sub End If Next MsgBox "保存ボタンが見つかりませんでした。" End Sub Function WaitReadyState(objIE, keyWord) As Boolean Dim startTime startTime = Now Do While True If objIE.Busy = False And objIE.readyState = 4 Then If InStr(objIE.document.Body.innerText, keyWord) > 0 Then WaitReadyState = True Exit Function End If End If If DateDiff("s", startTime, Now) > WAIT_TIME_OUT Then WaitReadyState = False Exit Function End If DoEvents Sleep 50 Loop End Function
参考
http://products.cybozu.co.jp/garoon/solution/api/application/index.html
APIが公開されておりSOAPで他のソフトウェアと連携できるようです。
Excel+VBAでこのAPIと通信するようなプログラムを組めばできると思います。
でも、純粋にコピペじゃだめなんですか?
>mdfmkさま
ありがとうございます。
サーバーの設定は変更できないので、
Excel+VBAだけではできないでしょうか?
下記の感じでいけそうな気もしますが・・・
http://questionbox.jp.msn.com/qa5295230.html
よろしくお願いいたします。
Dim objIE As Object '変数を定義します。
Dim objINPUT As Object 'Inputタグ格納用
'IEの起動
Set objIE = CreateObject("InternetExplorer.Application") 'オブジェクトを作成します。
objIE.Visible = True '可視、Trueで見えるようにします。 見ない場合は False
'処理したいページを表示します。
objIE.Navigate "http://アドレスを記述します。"
'ページの表示完了を待ちます。
While objIE.ReadyState <> 4 Or objIE.Busy = True '.ReadyState <> 4の間まわる。
DoEvents '重いので嫌いな人居るけど。
Wend
objIE.document.getElementsByName("email")(0).Value = "test"
objIE.document.getElementsByName("passwd")(0).Value = "test"
こんな感じで セットできるかな?
難しければ、SendKeysを使えばいいでしょう。
http://www.officetanaka.net/excel/vba/statement/SendKeys.htm
takntさま
どうもありがとうございます。
もし可能でしたら、
エクセルのB2の件も含めて説明をお願いいたします。
API でやる方がスマートだと思いますが、とりあえず IE の実装例です。
発言したい掲示板の書き込み画面を一度手動で表示し、その時のURLを★の次行に
書いて実行してください。
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) '// ★掲示を書き込む URL Const boardWriteURL = "http://192.168.1.1/cgi-bin/cbgrn/grn.exe/bulletin/send?cid=4" Const WAIT_TIME_OUT = 15 Sub SendBoardMessage() Dim objIE Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate boardWriteURL objIE.Visible = True If WaitReadyState(objIE, "掲示を書き込む") = False Then MsgBox "掲示板が表示できません" objIE.Quit Exit Sub End If '//☆1 タイトルを入れる objIE.document.getElementsByName("title")(0).Value = Range("B1").Value MsgBox "タイトルを書きました。" Sleep 300 '//☆2 内容を入れる objIE.document.getElementsByName("data")(0).Value = Range("B2").Value MsgBox "本文を書きました。" Sleep 300 '//☆3 「掲示する」をクリック '// objIE.document.getElementsByName("send")(0).Click '// ボタンの名前で検索 Dim objs, o Set objs = objIE.document.getElementsByTagName("input") For Each o In objs If o.Value = "書き込む" Then o.Click MsgBox "保存しました。" Exit Sub End If Next MsgBox "保存ボタンが見つかりませんでした。" End Sub Function WaitReadyState(objIE, keyWord) As Boolean Dim startTime startTime = Now Do While True If objIE.Busy = False And objIE.readyState = 4 Then If InStr(objIE.document.Body.innerText, keyWord) > 0 Then WaitReadyState = True Exit Function End If End If If DateDiff("s", startTime, Now) > WAIT_TIME_OUT Then WaitReadyState = False Exit Function End If DoEvents Sleep 50 Loop End Function
参考
MOOKさま
どうもありがとうございます。
はじめに参考のサイトをみてやってみたのですが
実力不足でできませんでした・・・
上記をエクセルにコピーしてみたのですが、
開くことはできても、
テキストエリアへの入力、
書き込むボタンを押す動作ができませんでした。
ご参考までに関連しそうな箇所の
ソースをアップさせていただきます。
objIE.document.getElementsByName("data_ed")(0).Value = cells(2,"B")
最後の2行ですが 上記に変えて みてください。
MOOKさま
どうもありがとうございます。
はじめに参考のサイトをみてやってみたのですが
実力不足でできませんでした・・・
上記をエクセルにコピーしてみたのですが、
開くことはできても、
テキストエリアへの入力、
書き込むボタンを押す動作ができませんでした。
ご参考までに関連しそうな箇所の
ソースをアップさせていただきます。
添付ファイルを追加する
2011/08/26 12:02:01