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

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

ただいまの
回答率

90.51%

  • VBA

    1798questions

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

  • ダイアログ

    12questions

    ユーザーにウィンドウやボックス等の形で個別で表示されるフォームであり、ユーザーに判断を促す目的で表示される。ユーザーが見逃す事のないよう、操作中のフォーム上にポップアップして表示される。

ファイル選択ダイアログが開かない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 819

VBA-IE

score 8

EXCEL VBAでホームページ(IE)にファイルをアップさせる記述を書いています。
ファイル選択のダイアログのところに直接フルパスでアップするファイル名を入力させたいと考えたいます。
objIE.document.getElementsByName("csv")(0).Click
でクリックできファイル選択ダイアログボックスが開くのですが、その後にVBAに制御が戻って来ないため、色々調べていたところ「VBA IE制御でファイル選択ダイアログにファイルパス入力(62945)」を見つけ、window.setTimeoutを使いVBAに戻ったところで、SendKeys "^v", Trueを実行すればできると分かり、下記のように記述しましたが、かんじんのファイル選択ダイアログボックスが開きません。
window.setTimeoutを使う前のobjIE.document.getElementsByName("csv")(0).Click
では確実にファイル選択ダイアログボックスが開いたので、記述がどこか間違えているのでしょうか?
window.setTimeoutを使う場合の方法を教えていただきたく、よろしくお願いします。

<関連場所のスクリプト記述>
objIE.document.parentWindow.execScript "window.setTimeout(""document.getElementsByName('csv')(0).Click();"",10);"
'1秒待機
Sleep (1000)
SendKeys "^v", True

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

私もweb系には強くないのに今回参考にされている質問で回答してしまった者です。(^-^;;

以下、推測交じりのアドバイスになってしまいますがご了承ください。

対応

objIE.document.parentWindow.execScript "window.setTimeout(""document.getElementsByName('csv')(0).Click();"",10);"
.Click().click()と小文字に変更すれば動作するのではないでしょうか?

原因はおそらく・・・

正常な動作が確認できている
objIE.document.getElementsByName("csv")(0).Click
という処理は、objIEが持つdocument内で'csv'というname属性を持つエレメントを探し、その中で先頭の要素に対してクリックイベントを行っています。
すべてVBA上で実行されるコードです。

これに対し、
objIE.document.parentWindow.execScript "window.setTimeout(""document.getElementsByName('csv')(0).Click();"",10);"
でVBA側が行っているのは、objIEに対して「一定時間後に指定したコマンドを実行しなさい」と指示しているところまでです。
実際に'csv'というname属性を持つエレメントを探して、その中で先頭の要素に対してクリックイベントを行うのは、IE側(のJavaScript)になると思います。
つまり""で括られた中身document.getElementsByName('csv')(0).Click();の部分はJavaScriptの記述ということです。
JavaScriptでは関数名の大文字小文字なども厳密に区別されますので、.Click()では動作しないのだと思います。

余談

~"window.setTimeout(""document.getElementsByName('csv')(0).click();"",10);"
の代わりに
~"window.setTimeout(""alert(document.getElementsByName('csv')(0).name);"",10);"
のように記述すると、想定したエレメントが取得できていればIE上で"csv"というメッセージが表示されるようになります。
エレメントが取得できていなければメッセージは表示されませんので、問題点を絞り込むのに使えると思いますよ。

参考になれば幸いです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/19 13:22

    Jawaさん、
    回答いただきましたClickを小文字に変えclickに変更したところ、見事にうまくいきました。
    ダイアログが開き、無事ファイル名が流し込まれ、感激です。
    javaScriptの記述とは、javaも勉強せねば。
    大変ありがとうございました。

    キャンセル

0

document.getElementsByNameではなくdocument.getElementsByTagNameだと、どうなりますか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/14 16:00

    ByTagNameでも同じくファイル選択ダイアログボックスは開きませんでした。

    キャンセル

  • 2017/09/15 09:24

    記述を変えてファイル選択ダイアログボックスが開くかどうか試した結果は下記です。
    objIE.document.forms("form1").csv.Click

    キャンセル

  • 2017/09/15 09:35

    記述を変えてファイル選択ダイアログボックスが開くかどうか試した結果は下記です。
    解決のヒントになりませんでしょうか?
    ①objIE.document.getElementsByName("csv")(0).Click ・・・・ 正常に開いた
    ②objIE.document.parentWindow.execScript "window.setTimeout(""document.getElementsByName('csv')(0).Click();"",10);" ・・・ 開かない
    ③objIE.document.forms("form1").csv.Click ・・・・ 正常に開いた
    ④objIE.document.parentWindow.execScript "window.setTimeout(""document.forms('form1').csv.Click();"",10);" ・・・・ 開かない
    ⑤objIE.document.getElementsByTagName("csv")(0).Click ・・・・ 実行時エラー91
    ⑥objIE.document.parentWindow.execScript "window.setTimeout(""document.getElementsByTagName('csv')(0).Click();"",10);" ・・・・ 開かない

    キャンセル

  • 2017/09/15 09:37

    web系には疎いので、テストに使えそうなサイトと項目が見つけ切れて無いんですよね。
    自前で作ればいいとは思うんですが、結構時間かかりそうなので。

    キャンセル

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    オブジェクトの有効期限

    □ 以下のリンクで解説してる部分で、分からない事があるので質問します。 http://ie.vba-ken3.jp/Methods/Navigate2/ ページ異動後は、オブジェ

  • 解決済

    VBA IE操作

    Andorid、java初心者ですが今回はVBAに関しての質問をさせてください。皆様のお知恵をお貸しください。 現在、VBAでIEのタブを自動で開くマクロを作りたいと考えています

  • 解決済

    エクセルVBA   

    Sub ie_test() 'IEテストする。 'IEの起動 Dim objIE As InternetExplorer Dim htdoc As HTMLDocument

  • 受付中

    iuiuiiiiVBA クリック処理

    ①<a href="http://AAAx" target="_blank" data-ylk="slk:itemnm;pos:12" data-rapid_p="23"> パン

  • 解決済

    VBA IE制御でファイル選択ダイアログにファイルパス入力

    ACCESSで商品データベースを持っており、通販サイトへ商品登録作業を簡略化しようとVBAで出品プログラムを作っております。 本来は通販サイトへの画像の登録はWEBブラウザで

  • 解決済

    HTMLElementCollection 実行時エラー 型が一致しません 原因

    前提・実現したいこと EXCEL VBAで特定WEBページからデータを収集するシステムを作ってます。 HTMLから要素を抜き出す機能を実装中に以下エラーが発生しました。

  • 解決済

    IEでリンクされているページへ移動させるVBAの記述が分からない

    VBAでIEの表示画面でリンクされているページへ移動させる処理で困っています。 IEでの表示イメージは下記です。該当するものが27件あり、そのなかで今のページでは1-20件を表

  • 受付中

    WEBサイトからファイルのダウンロード動作が不安定

    EXCEL VBAでWEBサイトからCSVファイルをダウンロード、名前を付けて保存させる処理をさせたいと思っています。 具体的には、①CSVダウンロードボタンをクリックした後、②フ

同じタグがついた質問を見る

  • VBA

    1798questions

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

  • ダイアログ

    12questions

    ユーザーにウィンドウやボックス等の形で個別で表示されるフォームであり、ユーザーに判断を促す目的で表示される。ユーザーが見逃す事のないよう、操作中のフォーム上にポップアップして表示される。