ExcelのマクロVBAでブラウザ自動で動かすものを作成中です。

ブラウザの表示内容、チェックボックスのチェック済みか?から処理を制御したいのですが、
うまくいきません。

input type="checkbox" name="flag[0]" value="1" disabled="disabled"
input type="checkbox" name="flag[1]" value="1" checked="checked"

というチェックボックスがあり、チェックされているかを取得したいのです。

値を入れる際は

objIE.Document.Forms(0).Item("flag[1]").Checked = true

でチェックがはいるので

chk = objIE.Document.Forms(0).Item("flag[1]").Checked

でchkにtrueが入ると思ってやっていますができません。

あまり参考になるサイトがなかったので何か情報ありますでしょうか?

回答の条件
  • 1人30回まで
  • 登録:
  • 終了:2012/05/03 10:22:29

ベストアンサー

id:ken3memo No.2

回答回数317ベストアンサー獲得回数115

少し気になったので、
テストページ http://may2012.s2009mmdd.com/test0502.html を作成して、テストしてみました。

Excel2007 IE9 OS:Vista で テスト http://www.youtube.com/watch?v=vl2-_0NZPMA
D

私の環境では、うまく動作してしまったので、
原因がわからないのですが・・・

ソースは下記のような感じです。
VBA側

Option Explicit

Sub ie_test()  'IEテストする。

'IEの起動
    Dim objIE As Object '変数を定義します。
    Set objIE = CreateObject("InternetExplorer.Application") 'オブジェクトを作成します。
    objIE.Visible = True      '可視、Trueで見えるようにします。
    
'処理したいページを表示します。
    objIE.Navigate "http://may2012.s2009mmdd.com/test0502.html"

'ページの表示完了を待ちます。
    While objIE.ReadyState <> 4 Or objIE.Busy = True '.ReadyState <> 4の間まわる。
        DoEvents  '重いので嫌いな人居るけど。
    Wend
    
    'チェックボックスにセットする。
    objIE.Document.Forms(0).Item("flag[1]").Checked = False
    objIE.Document.Forms(0).Item("flag[2]").Checked = True
    objIE.Document.Forms(0).Item("flag[3]").Checked = True
    objIE.Document.Forms(0).Item("flag[0]").Checked = True

    '値の取り出し を テストする
    Dim chk As Boolean
    Dim n As Integer
    
    For n = 0 To 3
        chk = objIE.Document.Forms(0).Item("flag[" & n & "]").Checked
        MsgBox "チェックボックス[" & n & "]の値は" & chk
    Next n
    
End Sub

HTML

<h1>チェックボックスのテスト 0502</h1>

<FORM ACTION="http://www.ken3.org/cgi-bin/test/test041-1.asp" METHOD="GET">
<font color="blue">TYPE="text" テキストの入力テスト</font><br>
お名前:<INPUT TYPE="text" SIZE="20" NAME="USER-NAME" VALUE="匿名希望"><br>
E-Mail:<INPUT TYPE="text" SIZE="20" NAME="EMAIL" VALUE="****@**.co.jp"><br>
<br>
<b><font color="blue">TYPE="CHECKBOX" チェックボックスの入力テスト</font></b><br>
チェックを入れてください<br>
<input type="checkbox" name="flag[0]" value="1" disabled="disabled">0<br>
<input type="checkbox" name="flag[1]" value="1" checked="checked">1<br>
<input type="checkbox" name="flag[2]" value="1">2<br>
<input type="checkbox" name="flag[3]" value="1">3<br>
<br>
<br>
<font color="blue">送信ボタン</font><br>
<INPUT TYPE="submit" NAME="btn1" VALUE="送信1">
<INPUT TYPE="submit" NAME="btn2" VALUE="送信2">
<INPUT TYPE="reset"  VALUE="入力し直す">

</FORM>

自分に都合のよいテストですが、こんな感じで動いてしまいました。
予想していた
[]付きの名前もそのまま使えるし、
disabled="disabled"
も関係ないみたいです?う~ん、、、

これだと、原因がわからないのですが、解決の糸口となれば幸いです・・・

id:tamurad007

ありがとうございます。いただいたものをベースに再度プログラムしたら無事に解決しました。
Dim chk As Boolean
これかもしれません。
宣言しなければなんでもいけると思っていました。。素人すぎました。

2012/05/03 10:21:26

その他の回答1件)

id:TransFreeBSD No.1

回答回数668ベストアンサー獲得回数268

ウォッチ式で他のプロパティも含め、変化する所がないか探してみてはいかがでしょう。
http://www.ken3.org/vba/watch-stop.html

id:ken3memo No.2

回答回数317ベストアンサー獲得回数115ここでベストアンサー

少し気になったので、
テストページ http://may2012.s2009mmdd.com/test0502.html を作成して、テストしてみました。

Excel2007 IE9 OS:Vista で テスト http://www.youtube.com/watch?v=vl2-_0NZPMA
D

私の環境では、うまく動作してしまったので、
原因がわからないのですが・・・

ソースは下記のような感じです。
VBA側

Option Explicit

Sub ie_test()  'IEテストする。

'IEの起動
    Dim objIE As Object '変数を定義します。
    Set objIE = CreateObject("InternetExplorer.Application") 'オブジェクトを作成します。
    objIE.Visible = True      '可視、Trueで見えるようにします。
    
'処理したいページを表示します。
    objIE.Navigate "http://may2012.s2009mmdd.com/test0502.html"

'ページの表示完了を待ちます。
    While objIE.ReadyState <> 4 Or objIE.Busy = True '.ReadyState <> 4の間まわる。
        DoEvents  '重いので嫌いな人居るけど。
    Wend
    
    'チェックボックスにセットする。
    objIE.Document.Forms(0).Item("flag[1]").Checked = False
    objIE.Document.Forms(0).Item("flag[2]").Checked = True
    objIE.Document.Forms(0).Item("flag[3]").Checked = True
    objIE.Document.Forms(0).Item("flag[0]").Checked = True

    '値の取り出し を テストする
    Dim chk As Boolean
    Dim n As Integer
    
    For n = 0 To 3
        chk = objIE.Document.Forms(0).Item("flag[" & n & "]").Checked
        MsgBox "チェックボックス[" & n & "]の値は" & chk
    Next n
    
End Sub

HTML

<h1>チェックボックスのテスト 0502</h1>

<FORM ACTION="http://www.ken3.org/cgi-bin/test/test041-1.asp" METHOD="GET">
<font color="blue">TYPE="text" テキストの入力テスト</font><br>
お名前:<INPUT TYPE="text" SIZE="20" NAME="USER-NAME" VALUE="匿名希望"><br>
E-Mail:<INPUT TYPE="text" SIZE="20" NAME="EMAIL" VALUE="****@**.co.jp"><br>
<br>
<b><font color="blue">TYPE="CHECKBOX" チェックボックスの入力テスト</font></b><br>
チェックを入れてください<br>
<input type="checkbox" name="flag[0]" value="1" disabled="disabled">0<br>
<input type="checkbox" name="flag[1]" value="1" checked="checked">1<br>
<input type="checkbox" name="flag[2]" value="1">2<br>
<input type="checkbox" name="flag[3]" value="1">3<br>
<br>
<br>
<font color="blue">送信ボタン</font><br>
<INPUT TYPE="submit" NAME="btn1" VALUE="送信1">
<INPUT TYPE="submit" NAME="btn2" VALUE="送信2">
<INPUT TYPE="reset"  VALUE="入力し直す">

</FORM>

自分に都合のよいテストですが、こんな感じで動いてしまいました。
予想していた
[]付きの名前もそのまま使えるし、
disabled="disabled"
も関係ないみたいです?う~ん、、、

これだと、原因がわからないのですが、解決の糸口となれば幸いです・・・

id:tamurad007

ありがとうございます。いただいたものをベースに再度プログラムしたら無事に解決しました。
Dim chk As Boolean
これかもしれません。
宣言しなければなんでもいけると思っていました。。素人すぎました。

2012/05/03 10:21:26
  • id:taknt
    ソースをみて チェックされているかどうか判断できなければ 難しいでしょう。

  • id:ken3memo
    disabled属性
    で何かコントロールしているとか?
    http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=37785&forum=7

    あっ、でも
    > input type="checkbox" name="flag[0]" value="1" disabled="disabled"
    > input type="checkbox" name="flag[1]" value="1" checked="checked"

    flag[1]のほうは、そんな属性(disabled)セットしていないか、
    >objIE.Document.Forms(0).Item("flag[1]").Checked = true
    >でチェックがはいるので
    chk = objIE.Document.Forms(0).Item("flag[1]").Checked
    が動かないのは、気になりますね。

    あれ?flag[1]のほうは、もともと、
    name="flag[1]" value="1" checked="checked"
    で、チェック済みだから、
    objIE.Document.Forms(0).Item("flag[1]").Checked = true
    が動いていたことにならないのかなぁ

    気になるのが
    name="flag[1]"
    の名前の flag[1] []なので、.Item(名前)で違うところ見ていたりするのかなぁ。

    以上、勝手な想像を書いて混乱させてしまったかもしれませんが、
    disabled="disabled"

    checked="checked"
    の初期値も考えながら、ソース全体を追ってみては?

    解決の糸口となれば幸いです。

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

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

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

回答リクエストを送信したユーザーはいません