親子におすすめの新型プラネタリウムとは?

お疲れさまです。
エクセルのVBAを使用してスクレイピングマクロを作成しております。
どなたか詳しい方がおりましたら、力を貸していただきたいと思います。

URLはこちらです→ https://shop.sanrio.co.jp/products/detail.php?pr …

在庫を取得したいのですが、在庫を表示させるためには、セレクトボックスを選択しないといけません。

以下のマクロを作成しましたが、在庫数が取得できない状況にあります。
詳しい方がいらっしゃいましたら、何がいけないか教えて頂けると助かります。



ページ = "https://shop.sanrio.co.jp/products/detail.php?pr …

objIE.navigate (ページ)

時間 = Now
Do While objIE.Busy Or (objIE.readyState <> 4 And objIE.readyState <> 2)
DoEvents
If Now > 時間 + TimeValue("00:00:15") Then
Exit Do
End If
Loop

Set objDOC = objIE.document


'セレクトボックスの値取得(こちらはうまく取得できました)
 (※ここでエクセルのセレクトボックスシートへセレクトボックスの値を書き出しております)

If objDOC.getElementsByClassName("summarySelect01 hasCustomSelect").Length > 0 Then
Sheets("セレクトボックス").Select
Cells.ClearContents

s = 1

For Each 要素 In objIE.document.getElementsByTagName("select")
If 要素.Name = "classcategory_id1" Then
For Each 要素1 In 要素.all.tags("option")
If 要素1.Value = "" Then Exit For
Sheets("セレクトボックス").Cells(s, 1) = 要素1.Value
Sheets("セレクトボックス").Cells(s, 2) = 要素1.innerText

s = s + 1

Next
Exit For
End If
Next


※ここからが問題の箇所です。
'在庫の取得
ax = Sheets("セレクトボックス").Range("A1").End(xlDown).Row

Set SELECT1 = objIE.document.getElementsByClassName("summarySelect01 hasCustomSelect")(0)

For s = 2 To ax
SELECT1.Value = Sheets("セレクトボックス").Cells(s, 1)
Sleep 20
SHT.Cells(n, "f") = Sheets("セレクトボックス").Cells(s, 2) & objIE.document.getElementsByClassName("fs16")(0).innerText _
& vbCrLf & SHT.Cells(n, "f")
Stop
Next s
Stop


エクセルのセレクトボックスシートは以下の様に値が取得されています。
A列(value)   B列(innertext)
__unselected   選択してください
3489       Mサイズ
3488       Lサイズ

このQ&Aに関連する最新のQ&A

A 回答 (2件)

こんにちは。



最初に、今回は、サイトの利用条件を確認をしていませんが、これはスクレイピングマクロとは呼べるほど過激な内容ではありませんから、相手様に迷惑かけないレベルとしては、ちょうどよい内容かもしれません。本格的にスクレイピングにしてしまうと、自分のプロバイダーから電話でも来そうな気がしてきます。

一応、マクロは作ってみたものの、文字数のアップロード制限がありますので、出せませんでした。私がよく使う手法は、画面を見ながら、Excelのシートにインポートする方法です。その分、コードが長くなってしまいます。

答えだけ書いておきます。

ご質問の要件は、 "box_right_summary"
にほぼ必要な情報を満たしているはずです。
下に書いたように、子ノードから取り出すほうが楽だと思います。
もちろん、InnerText 直接でもよいでしょう。

(ステートメントは「With objIE」 となっていますから、間違えないようにしてください。document の失敗で、objIEまで壊したくないからです。つまり、objIEは使い回しを考えていたからです。)

Set bxrt_sum = .document.getElementsByClassName("box_right_summary")
c_cnt = bxrt_sum.Length
   If c_cnt > 0 Then '商品情報1 (ChildNodeから取得)
    With bxrt_sum(0).ChildNodes
     For i = 0 To .Length - 1
      ndn = .Item(i).NodeName
      If Left$(ndn, 1) <> "#" Then
       buf = .Item(i).innerText

ご質問が、セレクトボックスとおっしゃっていたので、すぐに理解できませんでしたし、在庫の表示は、◯と数字の両方があります。ご質問の中のULRのように、表示がない所もあります。

もしも、InputBox のことでしたら、こういう場合は、その場所にないことが多いものです。今回は、たまたま、ID="num" が存在していましたので、

Set oNum = .document.getElementByID("num") '数量の取得
qty = oNum.Value

として取得しました。

ただ、この手の基本は、まず、HTMLコードをみて、Table がありそうなら、それで試してみるというのが常套手段です。作成は、InternetExplorer のみで作りました。

私の作ったコードは、様子見にさせていただくことにして、その代わり、取得した画像を御覧ください。
「エクセルVBAによるIE制御(セレクトボ」の回答画像1
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ここの点ですが、教えて頂ければと思います。

<ご回答文抜粋>
ご質問が、セレクトボックスとおっしゃっていたので、すぐに理解できませんでしたし、在庫の表示は、◯と数字の両方があります。ご質問の中のULRのように、表示がない所もあります。

<さらにご質問>
ご質問の中のULRのように、表示がない所もあります。ですが、質問で上げさせていただきましたURLですが、サイズのセレクトボックスを選択すると在庫が表示されます。

質問がわかりにくく申し訳なかったのですが、マクロでセレクトボックスを選択すると在庫が出てこないので、何か方法があればと思いご質問させていただきました。

お礼日時:2016/10/23 16:39

#1の回答者です。



読み違えまして、大変すみません。

現在、FireFox のFireBugで、コードを見ながら試してみましたが、解決策が現在、私には見つかりません。できると思っていただけに、今、反省と落胆しています。
私の知っている範囲は、一通り試しました。

以下、SBox1(0) は ご質問のSELECT1 同義です。

SBox1.selectedIndex =1
とか、
SBox1(0).options.value ="3489"

でいけると思ったのですが、それでも変化しないし、
SBox1(0).fireEvent("onchange")
でも、画面が変化しませんでした。
options.value は、書き込みできています。

画面が変化する時は、このようなClass表示が現れることはわかりました。
"summarySelect01 summarySelect01Focus summarySelct01Changed"
これによって、書き換えられるのだろうと思いますが、そのイベントが見つかりません。

まったく同類の質問を見つけましたが、そこでも解決の目処が立ちません。

三流君 IE SELECTタグの選択 .SelectedIndex=nで選択
フィードバック
ホームページに来た質問
http://www.ken3.org/vba/backno/vba154.html
    • good
    • 0
この回答へのお礼

お忙しいところありがとうございます。

私も悪戦苦闘しております。( ノД`)…

今回、いろいろとお時間を裂いてしまい、申し訳ございませんでした。

解決作が見つかりましたら、ここにアップします。

本当にありがとうございました。

お礼日時:2016/10/24 12:47

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QWebページ中の javascript をVBAから実行するには

VBAで objIE を使用して Webページ中の javascript を実行したいのですが、
onclick="~~" の記述がないケースがあり困っております。
例えば以下のような記述です。

<a href="javascript:;" pnb="~~" scdaction="~~" bulkaction="~~" id="~~">~~</a>

onclick の記述がない上記のようなケースでは、javascript の呼び出しはどのようにすればよいのでしょうか?
不可能でしょうか?

Aベストアンサー

ここを読んでみればよいのですが、だらだらと文章が長いですね。^^;
http://www.ken3.org/vba/backno/vba170.html
この内容のまとめは、この後でします。もし、ダメだったら、こちらも読んでください。

>onclick="~~" の記述がないケースがあり困っております。

最初に、ストレートな回答ではありませんが、私の場合、いくつかの方法を試しています。

>a href="javascript:;" pnb="~~" scdaction="~~" bulkaction="~~" id="~~">~~</a>
この場合は、id がありますから、確実のオブジェクトとして取得できますから、まず最初に、ダメ元で、
id名.Click を一度試してみます。もしくは、この行の上部のコードのオブジェクトのClass名のオブジェクトのひとつから、ヒットさせようとします。

そこでダメなら、ということで、ken3の内容に入るのですが、この著者の結論(正解)は、

ご質問に沿って書くと
For i =0 To objIE.Document.links.Length -1
If objIE.Document.links(i).href ="javascript:;" Then '文字の比較は、大文字・小文字がある
   objIE.Document.Links(i).Click
End if
Next i

ということになっています。私は、このコードは少し古臭く感じます。

ここで、ken3 の所では、Testサイトを用意してくれているので、試してみましたが、ダイレクトでサイトがとれている限りは、やはり、

Testサイト:http://www.ken3.org/vba/test170f.html

 objIE.Navigate "javascript:xxxxx;"

が利くことが分かりました。ただし、実際は、ここで時間待ちをしなくてはならないでしょう。
解説は、フレームからですので、うまく行かなかったようです。

ここを読んでみればよいのですが、だらだらと文章が長いですね。^^;
http://www.ken3.org/vba/backno/vba170.html
この内容のまとめは、この後でします。もし、ダメだったら、こちらも読んでください。

>onclick="~~" の記述がないケースがあり困っております。

最初に、ストレートな回答ではありませんが、私の場合、いくつかの方法を試しています。

>a href="javascript:;" pnb="~~" scdaction="~~" bulkaction="~~" id="~~">~~</a>
この場合は、id がありますから、確実のオブジェクトとして取得できますか...続きを読む

Qvba ie操作 ボタンを押したい(2)

https://ca.omc-card.co.jp/member/omcplus_login.html
のサイトにログインしたいのですが、ログインボタンが押せません。

ソースは、
**********************************************************************************
<FORM action="../member/xt_mem_top_login.asp" method="post" name="form1"><input type="hidden" name="sid" value=""><input type="hidden" name="pw" value=""> 
   ~~~省略~~~
<TABLE border="0" cellspacing="0" cellpadding="5" class="tab_button_bottom15">
<TR>
<TD><A href="javascript:checkInput(document.form1);"><IMG src="../img/button/login.gif" alt="ログイン" width="160" height="35" border="0"></A></TD>
</TR>
</TABLE>
</FORM>
**********************************************************************************
です。

---------------------------------------------------------------------------------
Sub test()
Dim objIE As InternetExplorer

Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.Navigate "https://ca.omc-card.co.jp/member/omcplus_login.html"

Do While objIE.Busy = True Or objIE.ReadyState <> 4
DoEvents
Loop

objIE.Document.forms(0).Item("sid_input").Value = "×××"
objIE.Document.forms(0).Item("pw_input").Value = "×××"

Do While objIE.Busy = True Or objIE.ReadyState <> 4
DoEvents
Loop

'objIE.Document.forms(1).submit 'エラーになる
objIE.Document.all.Item("document.form1").Click 'エラーになる
objIE.Document.forms(0).getElementsByTagName("input")(0).Click 'エラーにならないけどクリックもされない。
objIE.Document.forms(0).getElementsByTagName("input")(1).Click 'エラーにならないけどクリックもされない。
objIE.Document.forms(0).getElementsByTagName("document.form1")(1).Click 'エラーになる
objIE.Document.forms(1).getElementsByTagName("input")(1).Click 'エラーになる

Set objIE = Nothing
End Sub
---------------------------------------------------------------------------------

テキストにIDとPWを入れるところまでは出来たのですが、
ログインボタンを押すことができません。

すいませんがご教授ご回答よろしくお願いしますm( )m

https://ca.omc-card.co.jp/member/omcplus_login.html
のサイトにログインしたいのですが、ログインボタンが押せません。

ソースは、
**********************************************************************************
<FORM action="../member/xt_mem_top_login.asp" method="post" name="form1"><input type="hidden" name="sid" value=""><input type="hidden" name="pw" value=""> 
   ~~~省略~~~
<TABLE border="0" cellspacing="0" cellpadding="...続きを読む

Aベストアンサー

 「ログイン」と表示されたボタンの html コード には
<A href="javascript:checkInput(document.form1);"><IMG src="../img/button/login.gif" alt="ログイン" width="160" height="35" border="0"></A>
と書かれています。

 この html ソース は、簡単にいうと
<A href="リンク先URL"><IMG src="画像のURL"></A>
という構造で「画像をクリックするとリンク先のページが開く」ということを意味しています。

 ここの場合は、実際には「javascript:~~」というページはなく、「login.gif」という画像をクリックすると「checkInput(document.form1);」という「javascript」が働くというコードになります。

 従って、WEBページ自体の html 構造やブラウザ等のセキュリティの関係で受け付けてもらえない場合もありますが。。。

objIE.navigate "javascript:checkInput(document.form1);"

でもイケマス。

 「ログイン」と表示されたボタンの html コード には
<A href="javascript:checkInput(document.form1);"><IMG src="../img/button/login.gif" alt="ログイン" width="160" height="35" border="0"></A>
と書かれています。

 この html ソース は、簡単にいうと
<A href="リンク先URL"><IMG src="画像のURL"></A>
という構造で「画像をクリックするとリンク先のページが開く」ということを意味しています。

 ここの場合は、実際には「javascript:~~」というページはなく、「login.gif」という画像を...続きを読む

QVBAからIEを操作する時のウィンドウの選択の仕方がわかりません

VBAで、webページを操作するマクロを組んでいます。
具体的な手順としては、セルの商品番号をweb上の検索ボックスに入力して、別ウィンドウで開いた情報を「すべて選択」「コピー」してexcellの別シートに「貼り付け」までを行うものなのですが、
別ウィンドウで開いたページに対して、Sendkeysを行うにはどうやったらいいのでしょうか。
仮に、入力ページをA、結果ページをBとしたとき、Aに対しての入力とBページの表示までは出来ているのですが、Bページに対しての操作が出来ません。

ちなみに、事情があってwebクエリはあえて使っていません。
どなたか、いい解決方法・プロシージャをご存知でしたらよろしくお願いします。

Aベストアンサー

こんにちは。KenKen_SP です。

検索フォーム経由ではなく、検索結果のページをコードで直接開けないですか?
例えば、教えてGooなら

http://oshiete1.goo.ne.jp/kotaeru.php3?q=


URL の後ろに ? マークがあります。この記号以下は CGI に渡すパラメータです。
q= の後ろに質問番号が入りますので、予め質問番号が分かっている場合は、
この URL に質問番号を連結してやれば、直接開くことができます。

仮に、質問番号が A1 セルに入っているなら

IE.Navigate "http://oshiete1.goo.ne.jp/kotaeru.php3?q=" & Range("A1").Value

みたいなコードで検索結果ページを開くことができると思います。同様に、商品番号
を渡すパラメータがあるはずですから、探して見て下さい。CGI にパラメータを渡す
方法が Get でも Post の場合でも検索フォームの HTML ソースを見れば分かります。

取り合えず、一度検索フォームの HTML ソースを見てみましょう。

これが可能なら、コードで IE オブジェクトを作り、直接検索結果のページを開くこ
とができますので、IE のウインドウハンドルやウインドウタイトルは簡単に取得
できます。

簡単な例です。A1 セルの値を Google で検索し、結果を A5 セルに貼り付けます。


Option Explicit

Private Declare Function SetForegroundWindow Lib "user32.dll" ( _
  ByVal hWnd As Long _
) As Long
  
Sub Sample()

  Dim IE   As Object
  Dim strURL As String
  Dim lngRet As Long
  
  Const READYSTATE_COMPLETE = &H4
  
  strURL = "http://www.google.com/search?hl=ja&lr=lang_ja&ie=Shift_JIS&q="
  strURL = strURL & Range("A1").Value
   
  Set IE = CreateObject("InternetExplorer.application")
  IE.Visible = True
  IE.navigate strURL
  Do
    DoEvents
  Loop Until Not IE.Busy And IE.readyState = READYSTATE_COMPLETE
  
  ' IE のウインドウをアクティブにする
  lngRet = SetForegroundWindow(IE.hWnd)
  If lngRet <> 0 Then
    ' アクティブにできたらキー送信して結果をコピー
    SendKeys "^a", True
    SendKeys "^c", True
    ' 貼り付け
    Range("A5").Select
    ActiveSheet.Paste
  End If
  Set IE = Nothing

End Sub

どうしても検索フォームを経由し、新しい IE を開く必要がある場合は、
参考 URL 先の記事が参考になると思います。

参考 URL: http://www.ken3.org/cgi-bin/group/vba_ie.asp

ちなみに、SendKeys を使わない方法としては、IE.Document.body.innerHTML
で HTML ソースは取得し、クリップボードに転送してからペースト、、

というのでも良いかもしれません。

では。

こんにちは。KenKen_SP です。

検索フォーム経由ではなく、検索結果のページをコードで直接開けないですか?
例えば、教えてGooなら

http://oshiete1.goo.ne.jp/kotaeru.php3?q=


URL の後ろに ? マークがあります。この記号以下は CGI に渡すパラメータです。
q= の後ろに質問番号が入りますので、予め質問番号が分かっている場合は、
この URL に質問番号を連結してやれば、直接開くことができます。

仮に、質問番号が A1 セルに入っているなら

IE.Navigate "http://oshiete1.goo.ne.jp/kot...続きを読む

QINPUTにnameがない場合のsubmit

<FORM ACTION="login.asp" METHOD="POST">
USER ID:<INPUT TYPE="text" NAME="userid" SIZE="12"><br>
パスワード:<INPUT TYPE="password" NAME="pass" SIZE="12"><br>
<INPUT TYPE="submit" NAME="btn01" VALUE="ログイン">
<INPUT TYPE="reset" VALUE="クリア">
</FORM>

上記のHTMLに対して、VBAで操作する場合、
データセットした後

objIE.document.all.btn01.Click 'クリックメソッドを実行

で、submit出来るかと思います。

今、VBAで自動ログインしたいサイトが

<INPUT TYPE="submit" VALUE="ログイン">

のような感じで、nameの属性がありません。
こういうときは、VBAではどうすればログインできるのでしょうか。

初歩的な質問ですみませんが、わかる方教えてください。

<FORM ACTION="login.asp" METHOD="POST">
USER ID:<INPUT TYPE="text" NAME="userid" SIZE="12"><br>
パスワード:<INPUT TYPE="password" NAME="pass" SIZE="12"><br>
<INPUT TYPE="submit" NAME="btn01" VALUE="ログイン">
<INPUT TYPE="reset" VALUE="クリア">
</FORM>

上記のHTMLに対して、VBAで操作する場合、
データセットした後

objIE.document.all.btn01.Click 'クリックメソッドを実行

で、submit出来るかと思います。

今、VBAで自動ログインしたいサイトが

<INPUT TYPE="submit" VALUE="ログイン...続きを読む

Aベストアンサー

objIE.document.forms(0).elements(2).click
または
objIE.document.getElementsByTagName("INPUT")(2).click

QExcel VBAでのIE操作でクリックができないボタンはあるのでしょうか

お世話になります。

Excel2016 32bit Windows10

IE自動操作に取り組んでいます。まだ勉強が足りず、ボタンのクリックができません(画像Gカレンダー保存ボタン)。
InputTypeでもaタグでもありません。idで取得はでき、roleがボタンでタブ選択もできるのに、VBAでクリックができません。
この手のボタンはVBA操作不可能なのでしょうか。初歩的な質問かもしれませんが、みなさまのお力添えを頂きたいです。

<div class="goog-inline-block goog-imageless-button" role="button" tabindex="0" style="user-select: none;">
<div class="goog-inline-block goog-imageless-button-outer-box">
<div class="goog-inline-block goog-imageless-button-inner-box"><div class="goog-imageless-button-pos">
<div class="goog-imageless-button-top-shadow"></div>
<div class="goog-imageless-button-content">保存</div>
</div>
</div>
</div>
</div>

お世話になります。

Excel2016 32bit Windows10

IE自動操作に取り組んでいます。まだ勉強が足りず、ボタンのクリックができません(画像Gカレンダー保存ボタン)。
InputTypeでもaタグでもありません。idで取得はでき、roleがボタンでタブ選択もできるのに、VBAでクリックができません。
この手のボタンはVBA操作不可能なのでしょうか。初歩的な質問かもしれませんが、みなさまのお力添えを頂きたいです。

<div class="goog-inline-block goog-imageless-button" role="button" tabindex="0" style="us...続きを読む

Aベストアンサー

こんにちは。

すみません。画像が、ものすごく小さかったのが災いしたのと、

「:jc.save_top」って、wrapper となっている所をみると、何かと組み合わさっていると思います。それをクリックされようとしていたので、なんだろうと考えしまいました。

>(画像Gカレンダー保存ボタン)

カレンダーの赤い「保存ボタン」をクリックですか?
質問の回答になっているのか、あまり確信がありません。

初歩の初歩としては、
<div class="goog-imageless-button-content" unselectable="on">保存</div>
ここから、

With objIE

Set buttons = .Document.getElementsByClassName("goog-imageless-button-content")
For Each n In buttons
   If n.innerText Like "保存*" Then ''= "保存" でもよい
    n.Click
    Exit For
   End If
Next n

End With

で、行けるのではないでしょうか。
もちろん、オブジェクト配列になっているはずですから、それで、何番目か探して、直接、buttons(9).Clickとしても行けるかとは思います。

質問と食い違っていたら、補足をつけてください。

それと、余談なのですが、Googleで、IEを使うのは抵抗ありませんか?フルに動かないと思います。かと言って、Google Chrome をVBAで扱う方法が、なぜか確立できていませんね。Selenium VBAを使うことにはなっているのですが、いろいろやってみて、どうやらバージョンが遅れていることに気が付きました。前から、ずっと遅れているようです。

こんにちは。

すみません。画像が、ものすごく小さかったのが災いしたのと、

「:jc.save_top」って、wrapper となっている所をみると、何かと組み合わさっていると思います。それをクリックされようとしていたので、なんだろうと考えしまいました。

>(画像Gカレンダー保存ボタン)

カレンダーの赤い「保存ボタン」をクリックですか?
質問の回答になっているのか、あまり確信がありません。

初歩の初歩としては、
<div class="goog-imageless-button-content" unselectable="on">保存</div>
ここから、

Wit...続きを読む

QVBAでJavaScriptを動かす方法

<SELECT name="Mgr" onchange="Chg(this,1)">
<OPTION selected value="9999999">==選択==</OPTION>
<OPTION value="1">a</OPTION>
<OPTION value="2">b</OPTION>
<OPTION value="3">c</OPTION>
</SELECT>

上記のタグで
VBAから
objIE.Document.forms(0).Mgr.Item(2).Selected = True
とSelectタグを選択したときにChg(this,1)を動かす方法を教えてください。
objIE.Navigate "JavaScript:Chg(this,1)"とやっても動きませんでした。

Aベストアンサー

こんにちは。

既存のHTMLで、IEオブジェクトのDocument から取るのでしたら、JavaScript は、VBA自体から書き入れようはないけれども、以下のサイトの下のほうに

IE SELECT後 .fireEventでJavaScriptのイベントを起動
http://www.ken3.org/vba/backno/vba155.html

# objIE.Document.all.Race.fireEvent ("onchange")

というように、fireEvent を使い、onchangeの、イベントを発生させるという書かれています。参考にならないでしょうか?

QExcel VBAでIEを操作し値を取得する方法

こん色々調査したのですが分からないのでお教えください。

EXCELのVBAにてIEを操作しているのですが
通常のボタン操作やテキストボックスの値を取得するのは
出来ています。
しかし「インラインフレーム(iframe)」内の値を取得する方法が
分かりません。
どなたかお分かりの方はいますでしょうか?
念のため参考のページ内のソースを一部抜粋させていただきます。



<html>
<head>
<title>SAMPLE</title>
</head>
<body>
<iframe width="400" height="400" src="http://www.yahoo.co.jp"></iframe>
</body>
</html>

Aベストアンサー

>No.1 この回答への補足
iframeタグのsrcを取得、それをNavigateすればどうでしょうか。
と提案したのですが、、、

Set objIE = CreateObject("InternetExplorer.application")
With objIE
.Navigate .document.getElementsByTagName("iframe")(0).src
End With

srcがhttpから始まっていない場合は内部リンクだそうで頭が必要です。
(srcがhttpから始まっているかどうか調べる必要ありですね)
.Navigate "http://○○○/" & .document.getElementsByTagName("iframe")(0).src

QEXCEL VBA でIEを制御して、INPUT type=file で出るダイアログに入力できませんか?

EXCEL VBA から、objIEオブジェクトを使って、IEを制御して、WEBページを制御するプログラムを作っています。
※通販サイトのモール内管理の自動化プログラムです。

その際、操作対象のページに、INPUT type=file でファイルを入力するブロックがあります。
ここに自動でファイルを入れたいのですが、INPUT type=file を表示するボタンに対し .clickを入れるとそこでVBAが停止してしまいます。

そのモールそのものは、色々な制約があるので、公開できませんが、抜き出したのが

http://royal-e.heteml.jp/js_test/input_test.htm

になります。

objIEオブジェクトで INPUT type=file に希望のファイル名を入力することは出来るでしょうか?

方法をご存知の方がいらしたら、教えてください。

Aベストアンサー

何度もすみません、下記コードをVBAで実行した所正常にアップロード出来ました
ファイル名のテキストボックスにフォーカスが移り、sendkeysでファイル名が自動入力されて
アップロードボタンが自動押下されました
ファイル選択ダイアログは表示させずに済みました
但し当方の環境はXP+IE6+EXCEL2002ですのでIE7の場合動くかは不明ですが。

Private Sub input_txt()
 Dim objIE As Object
 Const READYSTATE_COMPLETE As Long = 4 'IEオブジェクト状態(4=読み込み完了)

 Set objIE = CreateObject("InternetExplorer.application")
 objIE.Visible = True
 objIE.Navigate "http://*****"

 While objIE.ReadyState <> READYSTATE_COMPLETE
  While objIE.Busy = True
   DoEvents
  Wend
 Wend

 objIE.Document.Forms("****").Item("****").Select
 Application.SendKeys "C:\Documents and Settings\****.ext", True
 objIE.Document.Forms("****").Item("****").Click 'アップロードボタン押下
End Sub

何度もすみません、下記コードをVBAで実行した所正常にアップロード出来ました
ファイル名のテキストボックスにフォーカスが移り、sendkeysでファイル名が自動入力されて
アップロードボタンが自動押下されました
ファイル選択ダイアログは表示させずに済みました
但し当方の環境はXP+IE6+EXCEL2002ですのでIE7の場合動くかは不明ですが。

Private Sub input_txt()
 Dim objIE As Object
 Const READYSTATE_COMPLETE As Long = 4 'IEオブジェクト状態(4=読み込み完了)
...続きを読む

QWEBページからのメッセージをVBAで

いつもお世話になっております。
エクセルVBAでIE制御についてです。
環境はWIN7、IE 9or11とエクセル2010です。

あるページのリンクをクリックすると、
WEBからのメッセージというダイアログボックスが出てきて、
続行しますか? はい いいえ を聞かれます。

その「はい」をVBAで押したいのですが、
sendkeysメソッドで押そうとしてもうまくいきません。

以下に記載したサイトのOKボタンを押すと出てくるものです。
http://kamicha1.web.fc2.com/Excel/Test20090726.html


以下が書いたコードです。


Declare Sub Sleep Lib "KERNEL32" (ByVal dwMilliseconds As Long)


Sub test()

Dim ie As Object

Set ie = CreateObject("InternetExplorer.Application")

ie.Visible = True
ie.navigate "http://kamicha1.web.fc2.com/Excel/Test20090726.html"
      
Do While ie.Busy Or ie.readyState < 4
DoEvents
Loop

ie.document.getElementsByClassName("bt2")(0).Click '-ここで止まる

Sleep 2000

SendKeys "{Enter}"

End Sub

ステップ実行していくと、ここで止まると書いた所で、
IE上にダイアログは表示されるのですが、
それ以上ステップ実行ができなくなってしまいます。

ダイアログを自分でOKかキャンセルで消すと続きが動くようになります。
その間はVBEはビジー状態となり操作できません。

そのためそれ以降のsendkeysメソッドに
たどり着けない状況かと思われます。

いろいろ調べたところIE8以降はダイアログボックスは
IEから出ているのではなくOS?から出ているとの事でした。

上記のサイトはHTML本体にjavaスクリプトが記載されており、
それをVBAから操作すればどうにかOKボタンが押せるらしいのですが、
自分が操作したいページにはそれらしき記載がありませんでした。

対象のアンカータグは
<a herl=URL 中略 data-comfirm=続行しますか? >
のような感じで記載がありました。

完全に煮詰まっております。
自動でOKをクリックするかEnterキーでOKを押すでも構いません。
どうかご教授お願いいたします。

いつもお世話になっております。
エクセルVBAでIE制御についてです。
環境はWIN7、IE 9or11とエクセル2010です。

あるページのリンクをクリックすると、
WEBからのメッセージというダイアログボックスが出てきて、
続行しますか? はい いいえ を聞かれます。

その「はい」をVBAで押したいのですが、
sendkeysメソッドで押そうとしてもうまくいきません。

以下に記載したサイトのOKボタンを押すと出てくるものです。
http://kamicha1.web.fc2.com/Excel/Test20090726.html


以下が書いたコードです。


Dec...続きを読む

Aベストアンサー

ご参考
https://gist.github.com/kumatti1/4028479

QVBAでIEの操作→サブウインドウを操作するには

以下の「oya.html」「ko.html」があります。
それを、VBAで「oya.html」を開き、「子ウインドウを開く」リンクをクリックさせて、開いた「ko.html」の「子ウィンドウを閉じる」リンクをクリックさせたいのだがどうすればよろしいでしょうか?
---------VBA ↓---------------------------------------------
Private Sub CommandButton1_Click()
Dim objIE As Object 'Object型
'IEのオブジェクトを作る
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate "file:///C:/oya.html"'「oya.html」を開く
'----表示待ち↓--------
Do While objIE.Busy
 DoEvents
Loop
Do While objIE.document.ReadyState <> "complete"
DoEvents
Loop
'----表示待ち↑----------
For Each linkitem In objIE.document.all.tags("A") 'Aタグ
If linkitem.innerText = "子ウインドウを開く" Then
linkitem.Click
End If
Next
'----表示待ち↓--------
Do While objIE.Busy
DoEvents
Loop
Do While objIE.document.ReadyState <> "complete"
DoEvents
Loop
'----表示待ち↑----------
  For Each linkitem In objIE.document.all.tags("A") 'Aタグ
If linkitem.innerText = "子ウィンドウを閉じる" Then
linkitem.Click
End If
Next
End Sub
---------------↑-------------------------------------------
--------oya.html ↓-----------------------------------------
<html>
<head><script>
function showModal(){
var value = showModalDialog('ko.html');
}
</script></head>
<TITLE>親ウィンドウ</TITLE>
<body>
<a href="javascript://" onclick="showModal()">子ウインドウを開く</a><br>
</body>
</html>
-----------------↑-----------------------------------------
--------ko.html ↓--------------------------------------------
<html>
<TITLE>子ウィンドウ</TITLE>
<body>
<a href="#" onClick="window.close(); return false;">子ウィンドウを閉じる</a><br>
</body>
</html>
------------------↑-----------------------------------------

以下の「oya.html」「ko.html」があります。
それを、VBAで「oya.html」を開き、「子ウインドウを開く」リンクをクリックさせて、開いた「ko.html」の「子ウィンドウを閉じる」リンクをクリックさせたいのだがどうすればよろしいでしょうか?
---------VBA ↓---------------------------------------------
Private Sub CommandButton1_Click()
Dim objIE As Object 'Object型
'IEのオブジェクトを作る
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = Tru...続きを読む

Aベストアンサー

状況を理解しました。
子ウィンドウを、showModalDialog で開いている為に、子ウィンドウを閉じるまで Excel に制御が返ってこないワケですね。
VBA で制御できるレベルではなさそうです。一応参考 URL を添付しておきますが。。。

http://www.usefullcode.net/2006/12/ieihtmldocument2.html
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200509/05090016.txt


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング