業務でサイボウズを使いはじめました。


エクセルのb2に入力されている内容を
マクロボタンを押すことで
サイボウズの掲示板へ入力したいのですが、
そのようなことは可能でしょうか?
バーションはCybozu® Garoon® Version 3.0.3となります。

どうぞよろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/08/25 20:14:27
  • 終了:2011/08/30 09:10:10

ベストアンサー

id:Mook No.4

Mook回答回数1312ベストアンサー獲得回数3912011/08/26 08:42:28

ポイント1500pt

API でやる方がスマートだと思いますが、とりあえず IE の実装例です。


発言したい掲示板の書き込み画面を一度手動で表示し、その時のURLを★の次行に

書いて実行してください。


  • タイトルをB1から拾って記述しているので、変更したいときは ☆1の次行を変更してください。
  • 「掲示する」を手動でクリックしたい場合は☆3の次行をコメントアウトしてください。
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://www.ken3.org/cgi-bin/group/vba_ie.asp

id:ohtsu6

MOOKさま

どうもありがとうございます。

はじめに参考のサイトをみてやってみたのですが

実力不足でできませんでした・・・

上記をエクセルにコピーしてみたのですが、

開くことはできても、

テキストエリアへの入力、

書き込むボタンを押す動作ができませんでした。


ご参考までに関連しそうな箇所の

ソースをアップさせていただきます。

フォロー

<iframe src="/cgi-bin/cbgrn/grn.cgi/grn/space?" class="re_editor" name="data_ed" id="data_ed_id" frameborder="0"style="display: none; border: 1px #cccccc inset; width: 584; height: 110.4;"> </iframe>




添付ファイルを追加する

2011/08/26 12:02:01

その他の回答(5件)

id:mdfmk No.1

mdfmk回答回数981ベストアンサー獲得回数1972011/08/25 20:54:53

ポイント100pt

http://products.cybozu.co.jp/garoon/solution/api/application/index.html


APIが公開されておりSOAPで他のソフトウェアと連携できるようです。

Excel+VBAでこのAPIと通信するようなプログラムを組めばできると思います。



でも、純粋にコピペじゃだめなんですか?

id:ohtsu6

>mdfmkさま

ありがとうございます。

サーバーの設定は変更できないので、

Excel+VBAだけではできないでしょうか?

下記の感じでいけそうな気もしますが・・・

http://questionbox.jp.msn.com/qa5295230.html

よろしくお願いいたします。

2011/08/25 22:44:30
id:yodaminami No.2

yoda回答回数161ベストアンサー獲得回数32011/08/25 22:00:57スマートフォンから投稿

http://ys2001hp.web.fc2.com/page2sa.html

このページが分かりやすいと思います。

id:taknt No.3

きゃづみぃ回答回数13539ベストアンサー獲得回数11982011/08/26 00:07:29

ポイント100pt

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

id:ohtsu6

takntさま

どうもありがとうございます。

もし可能でしたら、

エクセルのB2の件も含めて説明をお願いいたします。

2011/08/26 12:08:40
id:Mook No.4

Mook回答回数1312ベストアンサー獲得回数3912011/08/26 08:42:28ここでベストアンサー

ポイント1500pt

API でやる方がスマートだと思いますが、とりあえず IE の実装例です。


発言したい掲示板の書き込み画面を一度手動で表示し、その時のURLを★の次行に

書いて実行してください。


  • タイトルをB1から拾って記述しているので、変更したいときは ☆1の次行を変更してください。
  • 「掲示する」を手動でクリックしたい場合は☆3の次行をコメントアウトしてください。
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://www.ken3.org/cgi-bin/group/vba_ie.asp

id:ohtsu6

MOOKさま

どうもありがとうございます。

はじめに参考のサイトをみてやってみたのですが

実力不足でできませんでした・・・

上記をエクセルにコピーしてみたのですが、

開くことはできても、

テキストエリアへの入力、

書き込むボタンを押す動作ができませんでした。


ご参考までに関連しそうな箇所の

ソースをアップさせていただきます。

フォロー

<iframe src="/cgi-bin/cbgrn/grn.cgi/grn/space?" class="re_editor" name="data_ed" id="data_ed_id" frameborder="0"style="display: none; border: 1px #cccccc inset; width: 584; height: 110.4;"> </iframe>




添付ファイルを追加する

2011/08/26 12:02:01
id:you1031931 No.5

you1031931回答回数323ベストアンサー獲得回数32011/08/26 11:01:40

コピペが出来なかったら

できないんじゃないかな

他の人は何かややこしいですけど出来るっぽいことを書いてますね

複雑で難しい気もしますけど頑張るしかないですね

id:taknt No.6

きゃづみぃ回答回数13539ベストアンサー獲得回数11982011/08/26 12:14:14

objIE.document.getElementsByName("data_ed")(0).Value = cells(2,"B")

最後の2行ですが 上記に変えて みてください。

  • id:mdfmk
    あ、確かにohtsu6様の仰る通りですね。
    フォームのあるHTMLのソースが見れて、フォームの名前(name)が分かればいけそうですね。


    http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200910/09100067.txt
    http://www.ken3.org/vba/backno/vba176.html
  • id:a-kuma3
    そうかなあ >id:mdfmk さん
    HTML のソースって、変わる可能性があるし。
    SOAP の API が公開されてるのなら、そっちを使う方が良いと思うけどな。

    因みに、Excel の VBA から、msxml の XMLHttpRequet を使えることは実践済み。
    クロスドメインとかの制限にひっかかるかと思ったら、あっさり動いたけど。
  • id:Mook
    #コメントをまとめました。

    提示いただいたソースは Web での表示状態になってしまっているようですが、
    このページのソースを見たところ、入力欄は data で問題ないようです。

    ただ送信の方は「書き込む」ボタンに name 属性が無いですね。
    このあたり仕様が変わったかもしれませんので、回答を修正してみました。

    確認のためのメッセージ表示を追加したので、どこまで表示されるか報告いただけますか?
    うまくいかない場合はまずタイトルを削除してみてもらえるでしょうか。

    このあたりは、サーバ側の設定に依存しますし、サーバの設定が変わると都度対応する
    必要があります。
  • id:ohtsu6
    Mookさま

    再度ありがとうございます。
    明日職場に行って試してみます。
  • id:ohtsu6
    Mookさま
    新しいもので試してみたのですが、
    やはりできませんでした・・・。

    掲示板が表示できませんと
    やはり表示されてしまいました。
    タイトルについての3行をコメントアウトしても駄目でした・・・

    明日違うパソコンで試してみます。
  • id:Mook
    一番最初のところで引っかかているようですね。

    掲示板が表示されたことの確認を、表示されたページに「 掲示を書き込む」
    という文字があることで確認していたのですが、これがないのではないでしょうか。


    実際にある文字に書き換えてみてどうでしょうか。
  • id:ohtsu6
    Mookさま
    できました!

    どうもありがとうございました。
  • id:mdfmk
    おお、すごい!
  • id:Mook
    無事動いたようで何よりでした。

    実際の画面が見えなかったので、評価版を元に作成したのですが
    やはり画面の違いが原因だったようです。

    セル等は適当にアレンジして使ってください。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません