ファイルダイアログからファイルをアップロードする
Excel VBAマクロでIEの自動制御にて、ローカルにある画像データ等をアップロードしたいケースがあります。
Webサイトではドラッグアンドドロップなどでファイルを選択するサイトも多いですが、
本記事ではファイルダイアログからファイルを選択する場合の方法を纏めています。
ファイルダイアログ表示し、ファイル選択するサンプルコード
ヤフーオークションの出品データ作成をサンプルにコード作成しています。
ヤフオクで出品する際、画像をファイルダイアログで選択可能です。
'■InternetExplorerでファイルダイアログを使用し、ファイルをアップロードする Sub sample_IE_FileDialog_Upload() Dim objIE As InternetExplorer '■IEを起動 Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True '■該当ページへ遷移 objIE.navigate "https://auctions.yahoo.co.jp/sell/jp/show/submit?category=0" Call Call_IE_WaitTime '■クリップボードへアップロードするファイルを「フルパス」でコピー Call call_ClipBoardSave("C:\testdata\sample.png") '■ファイルダイアログを表示する objIE.Document.parentWindow.execScript "window.setTimeout(""document.getElementsByClassName('ImageUpload__hide')(0).click();"",10);" Application.Wait Now() + TimeValue("00:00:02") '■Ctrl + V でアップロードするファイルをペースト→Enterで確定する SendKeys "^v", True Application.Wait Now() + TimeValue("00:00:02") SendKeys "{ENTER}", True Application.Wait Now() + TimeValue("00:00:02") End Sub
HTMLコードサンプル
'20/08/30時点のHTMLコード <div id="ImageUpload" class="ImageUpload u-marginB10"> <label class="ImageUpload__label js-dragdrop-area" for="selectFileMultiple"> <span class="ImageUpload__hide">ドラッグ&ドロップまたはファイルを選択</span> <span class="ImageUpload__text"><span class="js-dragdrop-num">10</span>枚まで</span> </label> </div>
注意点
- こちらのコードだけでは動作しません。
下記の読み込み待ちのパーツ化したコードが必要です。
VBAでIE操作「ブラウザの読込待ち」処理をパーツ化する【エクセルマクロ】
ExcelVBAマクロ「指定したキーワードをクリップボードへコピーする」をパーツ化する - SendKey(キーボードの入力反映)を使用する為、処理する前には必ず処理待ちの時間を作りましょう。
※処理待ちしないと、マクロの実行が早すぎて反映できない場合があります。
コメント