- ベストアンサー
web上のCSVファイルをダウンロードするマクロ
web上のCSVファイルを数秒毎にダウンロードしてテキストモードで上書き保存するマクロを作りたいのですがどのように記述すればよいでしょうか。 Windows XP SP3 Microsoft Exce2000です。 コピー元 http://www.***.***/101.csv 102.csv ベーシック認証ありuser=**** password=**** コピー保存先 c:\****\101.csv ファイルサイズは20KB前後です。 超初心者ですがどうぞよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
個人的に、その時々に、こうした質問が出るたびに、同じ問題をずっと考えています。まだ、解決していない部分が残っています。 >認証はhttp://ユーザ:パス@****.netという方法で、 これで、オープンの状態になるなら、取れるかもしれませんね。 昔は、こういう書き方をしていたようですが、今は、こういう方法は使ったことがありませんので分かりませんでした。私自身が課題としている部分とは違うようです。 >だけどもうひとつhttpのダウンロードのためアスキーモードでのダウンロードか出来なくてこの変換の課題が残っています。 たぶん、オープンした後に、どこかをクリックしてダウンロードするとかいう種類のものでしょうか? http://ユーザ:パス@****.net そのまま、http://www.***.***/101.csv 102.csv としても、IEオブジェクトなら可能ですが、WinInet やWinHttp では無理になってしまいます。そうすると、IE Windowを取得して、開いた後にアクセスするというスタイルになるのだろうとは思います。それも、今の私では、具体的な例がないと作成できる自信がありません。 >コピー保存先 c:\****\101.csvからLFをCRLF ふつうは、テキストエディタでも置換出来ますが、ファイル Replace 関数を使って、以下のようにすると簡単に変換できます。 Sub ConvertTest1() Dim iFNo As Integer Dim oFno As Integer Dim textLine As String Dim buf As String, i As Long Dim FName As String Dim oFName As String Dim mPath As String '***Import FileName FName = "c:\****\101.csv" '******* i = InStrRev(FName, "\") 'Export FileName mPath = Mid(FName, 1, i) oFName = mPath & "$" & Mid(FName, i + 1) iFNo = FreeFile() Open FName For Input As #iFNo oFno = FreeFile() Open oFName For Output As #oFno Do Until EOF(iFNo) Line Input #iFNo, textLine buf = Replace(textLine, vbLf, vbCrLf, , , 1) Print #oFno, buf textLine = "" Loop Close #iFNo Close #oFno 'ファイル名の入れ替え On Error Resume Next Name FName As "tmp" Name oFName As FName Name mPath & "tmp" As FName Kill "tmp" On Error GoTo 0 Beep End Sub
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
本日、ずっと調べてみました。 ダウンロードの方法は、あちこちを検索すれば出てきますが、私の知っている範囲では、あくまでも、オープンの場所に限ります。また、CSVを数秒毎にダウンロードすることは可能です。 場所を特定していませんから、汎用性のあるマクロを書けということになると思いますが、それは不可能です。調べてみると、それぞれのサイトには、文字コードやユーザー名・パスワードの入力IDが異なったりしますから、それを探し出すのは、そのサイトの解析をしなければなりません。 また、ここのサイトのように、Cookieが設定してあって、一定の期間、パスワードを求められずにオープンのままアクセスは出来るかとは思います。ただし、IEオートメーションに限りますから、数を重ねるとストップしてしまいます。とても、IEオートメーションでは、数秒毎にダウンロードは不可能だと思います。 http://okwave.jp/qa/q6398307.html 質問内容は、多少、似ていても上記のどれの回答も該当しません、うまく行かないという雰囲気はなんとなく分かっていただけると思います。
補足
いろいろ調べて頂き本当にありがとうございます。 友人に協力してもらい試行錯誤聞き込みを繰り返しました結果、認証はhttp://ユーザ:パス@****.netという方法で、数秒毎のダウンロードはOnTimeを使うことで何とかクリア致しました。 だけどもうひとつhttpのダウンロードのためアスキーモードでのダウンロードか出来なくてこの変換の課題が残っています。 コピー保存先 c:\****\101.csvからLFをCRLFに変換できる記述方法がございましたらどうかご教授お願いします。m(_"_)m
お礼
気がつくのがおそくお礼が遅れて申し訳ありませんでした。 お蔭様で解決できました。 ありがとうございました。