Basic認証後にExcelファイルをDLするには?
未読分:11件
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
Message#11 2015年8月27日(木)15時39分 From: cherry | 返事 削除 変更 |
VBAマスターのメッセージ(#10)への返事 ご回答ありがとうございます。 返事が遅くなり、申し訳ございません。 > こちらは試していませんが、もう1つ方法として考えられるのは、Sendkeysで「名前をつけて保存」を選択し、ファイル保存先を指定して保存する方法です。 > 通常、IEのセキュリティーの問題でファイルダイアログは操作できないのですが、以下のVbscript経由ですと操作が可能です。 > こちらは、ダウンロードではなくアップロードの方法の内容になりますが、やっていることは同じなので、参考になればと思います。 > http://www.vba-ie.net/qanda/qanda.cgi?mode=viewthread&id=121 (順番が前後してしまいますが)保存先を指定したいと思っていたのですが、かなり難しいと聞いていたので諦めていました。 IE8だと可能なのですね! ということで、早速リンク先を開いてみたのですが…やはり私には高度な雰囲気が漂っていて…今の今までずっと考えていましたが、投稿者の方がExcel.ApplicationをExcel VBAで使用する辺りからわからなくなっています。 こちらの動作としては @「ファイルのダウンロード」ダイアログ表示される SendKeys "%S", True '「保存」ボタンを選択 A「名前を付けて保存」ダイアログ表示に変わる XXXXXXXXXXXXXXXXX ←保存先を選択(けどできないので→) SendKeys "%S", True '「保存」ボタンを選択(→前回保存した保存先に保存される) B「ダウンロードの完了」ダイアログ表示に変わる SendKeys "{ENTER}", True '「閉じる」でEnter なのですが、「XXXXXXXXXXXXXXXXX」の部分ができるようになるにはもう少し時間がかかりそうです。 > ソフトの制限でIE9以降を利用できないということなんですかね。 > 使用許可が降りないというのはセキュリティ上の問題ではないのように感じました。 > (IE8はセキュリティーホールだらけですし) そうみたいです。 システムの話ではソフトウェアの動作確認ができていないからということでした。 早く対応してもらいたいのですが。 というわけで、上記の件、もう少し時間をかけて勉強してみます。 希望の光が見えてきましたので、頑張ります。 本当にどうもありがとうございます。 |
Message#10 2015年8月26日(水)16時20分 From: VBAマスター | 返事 削除 変更 |
> IE9以降ならばDL先をIE側で設定できるので最初に教えていただいたSendkeysで「保存」を選択すればいいのかなと思いますし、Chromeならダイアログの表示なくDLも可能だと思うのですが、その使用許可が下りないため足掻いておりました。 ソフトの制限でIE9以降を利用できないということなんですかね。 使用許可が降りないというのはセキュリティ上の問題ではないのように感じました。 (IE8はセキュリティーホールだらけですし) こちらは試していませんが、もう1つ方法として考えられるのは、Sendkeysで「名前をつけて保存」を選択し、ファイル保存先を指定して保存する方法です。 通常、IEのセキュリティーの問題でファイルダイアログは操作できないのですが、以下のVbscript経由ですと操作が可能です。 こちらは、ダウンロードではなくアップロードの方法の内容になりますが、やっていることは同じなので、参考になればと思います。 http://www.vba-ie.net/qanda/qanda.cgi?mode=viewthread&id=121 |
Message#9 2015年8月26日(水)10時42分 From: cherry | 返事 削除 変更 |
VBAマスターのメッセージ(#8)への返事 いろいろご迷惑をおかけして申し訳ございません。 実は社内ではF社のDocuShareという文書管理ソフトを使用しておりまして、通常そのソフトを使用してのサーバーアクセスになります。 ただVBAやVBSでそのソフトを操作することができず自動化操作のためWebブラウザ(社内統一でIE8しか使用できません)を使用しています。 そのためWindowsのフォルダの形式でそのサーバーにアクセスができません。 手動でのブラウザ操作は普通にHPなどを閲覧するのと変わらないためこの情報は不要と思ってしまっていました。 申し訳ございません。 もしかしたらそのせいで通常のIEとは違う結果になっているのかもしれません。 > BASIC認証がでてくるページのURLは何になりますか? > URLの最後が拡張子xlsxということですが、エクセルファイルのURLに直接アクセスする際にBASIC認証が表示されるのでしょうか? > それともエクセルリンクが貼られているページが表示されるのでしょうか? 上記状況のため最初に指定してアクセスできるログイン用のページはなく、DocuShareサーバー上のフォルダやファイルにアクセスしようとするとログイン画面が出てきます。 URLのアドレスバーにはそのログイン画面のURLは表示されておりません。 また一度認証するとブラウザ画面を閉じるまではログイン画面は出てきません。 DLしたいExcelファイルが入っているフォルダにアクセスしてログインするとフォルダの中身が表示され、該当のExcelファイル名をクリックするとDLダイアログが出現します(ファイル名にリンクが貼られている状態です)。 > 後者であれば、エクセルファイルのリンクをクリックせずにURLDownloadToFileを使えばコピーできると思います。 フォルダのURLを指定してログインしても、何故か(フォルダ内容でもなく)ログイン画面のhtmlが指定したExcelファイル名で保存されてしまいます(開こうとするとエラーになるので拡張子を変えて中身を確認しました。文字化けっていましたがログイン画面でした)。 キャッシュが残っているのかと思いましたが、「DeleteUrlCacheEntry (getURL)」を実行すると「DLLが見つかりません」というようなエラーになるのでコメントアウトにし、実行前に手動でキャッシュを全削除しました。 > あと、社内サーバーということですが、これはApacheが入ったWebサーバーですか?それとも単なるファイルサーバーでしょうか? > 社内サーバーということは、結局ローカルにすぎないので、IEで操作せずにVBAやVBSとかでいけると思うのですが、見解はいかがでしょう。 > Bフォルダにコピーして貼り付けというのが、バックアップのためなのかどうか分かりませんが、単にファイルのコピペでしたら、IE操作はいらないんじゃないかと思った次第です。 > でも、BASIC認証しているということは、ApacheでWebサーバー化しているということだろうとも思いますが、どちらにせよファイルのコピペなら他の簡単な方法があるような気がします。 いろいろ教えていただいてありがとうございます。 自分は事務部門で作業をしているためサーバーの詳細はわからないのですが(どこかを見れば判断できるものなのでしょうか?)、DocuShareに置いてあるままではその後の作業に制限があるため一度ローカルに落とす必要がありました。 IE9以降ならばDL先をIE側で設定できるので最初に教えていただいたSendkeysで「保存」を選択すればいいのかなと思いますし、Chromeならダイアログの表示なくDLも可能だと思うのですが、その使用許可が下りないため足掻いておりました。 DocuShare上ということで何か通常のIEブラウザとは違う制約があるのかもしれません(キャッシュが消えていない可能性もそのせいであるのかもしれません)。 自分だけではできるできないの判断もできず、お騒がせして申し訳ございませんでした。 状況報告をして別案を考えてみようと思います。 お世話になりました、ありがとうございました。 |
Message#8 2015年8月26日(水)01時27分 From: VBAマスター | 返事 削除 変更 |
> 恐らく自分のやっていることはサーバー上のAフォルダにあるExcelファイルをローカルのBフォルダにコピーして貼り付けているのだと思います。 > URLの最後が拡張子xlsxなので、アクセスしようとすると(Enter押下)すぐ「開く」「保存」「キャンセル」を選択するダイアログが出現します。 > これはIEの仕様と伺ったことがあるのですが違うのでしょうか? > 昔はExcelもブラウザの画面に表示できていましたが… BASIC認証がでてくるページのURLは何になりますか? 例)C:\Users\**\index.html URLの最後が拡張子xlsxということですが、エクセルファイルのURLに直接アクセスする際にBASIC認証が表示されるのでしょうか? それともエクセルリンクが貼られているページが表示されるのでしょうか? 後者であれば、エクセルファイルのリンクをクリックせずにURLDownloadToFileを使えばコピーできると思います。 あと、社内サーバーということですが、これはApacheが入ったWebサーバーですか?それとも単なるファイルサーバーでしょうか? 社内サーバーということは、結局ローカルにすぎないので、IEで操作せずにVBAやVBSとかでいけると思うのですが、見解はいかがでしょう。 例)VBAでファイルコピー Sub Sample() FileCopy "C:\Work\Sample.txt", "D:\Tmp\Test.txt" End Sub Bフォルダにコピーして貼り付けというのが、バックアップのためなのかどうか分かりませんが、単にファイルのコピペでしたら、IE操作はいらないんじゃないかと思った次第です。 でも、BASIC認証しているということは、ApacheでWebサーバー化しているということだろうとも思いますが、どちらにせよファイルのコピペなら他の簡単な方法があるような気がします。 |
Message#7 2015年8月25日(火)19時30分 From: cherry | 返事 削除 変更 |
VBAマスターのメッセージ(#6)への返事 お世話になっております。 > > 状況は社内サーバーにWebブラウザ(IE8)でログインしExcelファイルをDLするという動 > > 作のVBAなのですが、ExcelファイルはそのURLにアクセスするとDLダイアログが出てし > > まいます。 > まず、ここですが、ブラウザからログインしてエクセルファイルをDLするということですが、これはプログラムで生成されるものですか? 知識があまりなく申し訳ないのですが、プログラムで生成するDLの方法がよくわからないのですが、 > それともAフォルダにあるエクセルファイルをBフォルダにコピーするといった内容になるのでしょうか? 恐らく自分のやっていることはサーバー上のAフォルダにあるExcelファイルをローカルのBフォルダにコピーして貼り付けているのだと思います。 > また、ダイアログがでてくるのはクリック処理ででてくるものですか? URLの最後が拡張子xlsxなので、アクセスしようとすると(Enter押下)すぐ「開く」「保存」「キャンセル」を選択するダイアログが出現します。 これはIEの仕様と伺ったことがあるのですが違うのでしょうか? 昔はExcelもブラウザの画面に表示できていましたが… > 単純にBフォルダにコピーするのであれば、BASIC認証をログインした後に、URLDownloadToFileでファイルをコピーするだけではダイアログはでてこないと思うのですが、どうなんでしょう。 URLDownloadToFileの処理に行く前にダイアログが出現して画面の遷移が止まってしまいます。 その間にURLDownloadToFileの処理をされてしまい、その時ログイン画面が表示されているのでそこをDLしているようです。 > >ExcelファイルはそのURLにアクセスするとDLダイアログが出てしまいます。 > ここの具体的な処理がきもかと思います。 > > また、念のためURLDownloadToFileについて詳しく解説しているページがあるので、こちらを確認されてはいかがですか? > > http://www.vba-ie.net/element/image-download.html 申し訳ございません。 上記リンク先やいろいろなサイトを回って、自力で解決できずこちらに投稿いたしました。 自分としてはURLDownloadToFileの処理はIEの表示とか関係なく、裏側(曖昧な表現ですみません)で処理してくれるものと思っていたのですが、違うのでしょうか…? 自分で今やりたいことをVBAでできるのかどうかも判断できず、いろいろと訊いてしまって申し訳ございません。 お力添えいただければと存じます。 よろしくお願いいたします。 |
Message#6 2015年8月25日(火)18時20分 From: VBAマスター | 返事 削除 変更 |
> 状況は社内サーバーにWebブラウザ(IE8)でログインしExcelファイルをDLするという動 > 作のVBAなのですが、ExcelファイルはそのURLにアクセスするとDLダイアログが出てし > まいます。 まず、ここですが、ブラウザからログインしてエクセルファイルをDLするということですが、これはプログラムで生成されるものですか? それともAフォルダにあるエクセルファイルをBフォルダにコピーするといった内容になるのでしょうか? また、ダイアログがでてくるのはクリック処理ででてくるものですか? 単純にBフォルダにコピーするのであれば、BASIC認証をログインした後に、URLDownloadToFileでファイルをコピーするだけではダイアログはでてこないと思うのですが、どうなんでしょう。 >ExcelファイルはそのURLにアクセスするとDLダイアログが出てしまいます。 ここの具体的な処理がきもかと思います。 また、念のためURLDownloadToFileについて詳しく解説しているページがあるので、こちらを確認されてはいかがですか? http://www.vba-ie.net/element/image-download.html |
Message#5 2015年8月25日(火)11時54分 From: cherry | 返事 削除 変更 |
度々申し訳ございません。 やはり直接DLしたいファイルのURLを指定しないとダメなようです。 DLできたと思えたファイルはログイン画面を無理矢理Excel化したものでした。 もしダイアログを表示しない方法があればご教示いただきたいです。 難しいようでしたら諦めます。 よろしくお願いいたします。 |
Message#4 2015年8月25日(火)09時48分 From: cherry | 返事 削除 変更 |
VBAマスターのメッセージ(#3)への返事 ご回答ありがとうございます。 共有PCで深夜に作動させるという条件があったため、IE8ですと前回保存先に設定したフォルダがデフォルトの保存先になってしまうこともあり、ダイアログなしで保存したかったのです(ダイアログの保存先を指定するのはもっと難しそうでしたので…)。 ただ昨日こちらに書き込んだ時点では全然思いついていなかったのですが、先程DLしたいExcelファイルの入ってるフォルダのURLを指定してログインしたみたところ、ログインもAPIによるDLも上手く動作いたしました。 直接DLしたいURLを指定しなければならないと思い込んでおりました。 大変失礼いたしました。 ダイアログを表示しないというのは難しいことなのですね、勉強になりました。 ありがとうございました。 |
Message#3 2015年8月24日(月)22時13分 From: VBAマスター | 返事 削除 変更 |
このへんですね。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12141518897 Sub SendKeys3() Dim objIE As Object 'IEを開いてファイルの保存URLを開く Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "http://book.impress.co.jp/appended/3384/IE2.html" 'Busyの間、待機 Do While objIE.Busy Sleep 1 Loop 'Busyとなるまで、待機 Do Until objIE.Busy Sleep 1 Loop 'ファイルを開くダイアログが表示されるまでループ Do While objIE.hWnd = GetLastActivePopup(objIE.hWnd) DoEvents Loop SendKeys "%S", True '保存を押すキー送信 End Sub |
Message#2 2015年8月24日(月)22時12分 From: VBAマスター | 返事 削除 変更 |
> 状況は社内サーバーにWebブラウザ(IE8)でログインしExcelファイルをDLするという動作のVBAなのですが、ExcelファイルはそのURLにアクセスするとDLダイアログが出てしまいます。 SendKeysで保存させたらどうですか? たしか以下で保存ができたような気がします。 SendKeys "%s" |
Message#1 2015年8月24日(月)18時15分 From: cherry | 返事 削除 変更 |
初めまして。過去に同じ質問がございましたら申し訳ございません。 こちらの掲示板の本サイトにてBasic認証でログインするコードを学んだのですが、まだまだ本当に理解できていなくてエラーとなるためご教示いただきたくよろしくお願いいたします。 状況は社内サーバーにWebブラウザ(IE8)でログインしExcelファイルをDLするという動作のVBAなのですが、ExcelファイルはそのURLにアクセスするとDLダイアログが出てしまいます。そのためAPIを使用してダイアログを出ないようにしてDLしようとしたのですが、下記コードだとログインしたらすぐそのダイアログが出てしまい、APIで保存できているのですがWebブラウザを閉じることができないためダイアログを出さないようにしたいです。 コードの位置が間違っているのでしょうか。 Option Explicit #If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr) #Else Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) #End If Private Declare Function DeleteUrlCacheEntry Lib "wininet" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) 'URLDownloadToFile API from URLMON. Private Declare Function URLDownloadToFile Lib "urlmon" Alias _ "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _ szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long Const WS_dl = "DL" Dim WS01 As Worksheet Dim getURL As String Dim dName As String Dim returnValue Sub Macro1() Dim objIE As Object Dim i As Long Dim uName As String Dim pWord As String Dim MaxRow As Long Dim getPath As String Dim getFL As String Dim strIdPw As String Set WS01 = Worksheets(WS_dl) With WS01 .Activate '各項目情報をDLシートより取得 uName = .Range("A2").Value pWord = .Range("B2").Value getPath = .Range("C2").Value MaxRow = .Cells(Rows.Count, 4).End(xlUp).Row For i = 2 To MaxRow Step 1 getURL = .Cells(i, 4).Value 'DLするExcelファイルのURL getFL = .Cells(i, 5).Value 'DLするExcelファイル名 '保存先と保存名の取得 dName = "C:\Users\" & uName & "\Desktop\" & getPath & "\" & getFL 'IEの起動 'Basic認証ページへアクセスする '「ユーザーID:パスワード」をBASE64エンコードする strIdPw = base64(uName & ":" & pWord) Call ieBasic(objIE, getURL, strIdPw) 'URLDownloadToFile API をコールする returnValue = 0 '初期化 'DeleteUrlCacheEntry(getURL) 'キャッシュクリア…DLしてもキャッシュに残らないようなのでコメントアウト returnValue = URLDownloadToFile(0, getURL, dName, 0, 0) objIE.Quit 'IEを閉じる Set objIE = Nothing Next i End With End Sub Private Sub ieBasic(objIE As Object, urlName As String, idPass As String) Dim headValue As String 'IEのオブジェクトを作成する Set objIE = CreateObject("InternetExplorer.Application") 'IEを表示 objIE.Visible = True 'Authorization情報 headValue = "Authorization: Basic " & idPass & vbCrLf '指定したBasicURLのページを表示する objIE.navigate urlName, , , , headValue End Sub ※Function base64は省略しています。 よろしくお願いいたします。 |
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降