2016-05-01 14 views
0

EDIT: xlsファイルから画像をダウンロードするには、このコードがあります。 出典:GET pictures from a url and then rename the pictureCSV/XLSカタログから画像をダウンロード

コード:

Option Explicit 

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 

Dim Ret As Long 

'~~> This is where the images will be saved. Change as applicable 
Const FolderName As String = "C:\Temp\" 

Sub Sample() 
    Dim ws As Worksheet 
    Dim LastRow As Long, i As Long 
    Dim strPath As String 

    '~~> Name of the sheet which has the list 
    Set ws = Sheets("Sheet1") 

    LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row 

    For i = 2 To LastRow '<~~ 2 because row 1 has headers 
     strPath = FolderName & ws.Range("A" & i).Value & ".jpg" 

     Ret = URLDownloadToFile(0, ws.Range("B" & i).Value, strPath, 0, 0) 

     If Ret = 0 Then 
      ws.Range("C" & i).Value = "File successfully downloaded" 
     Else 
      ws.Range("C" & i).Value = "Unable to download the file" 
     End If 
    Next i 
End Sub 

それはXLSファイルで正常に動作し、 "PIC NAME" と "URL" は、2つの別々の列です。私はcsvファイルを持っていて、xlsとは違って、csvは "|"で区切られた1つの列に値を持っています。 (PIC NAME | URL)。だから、コーディング時のノブである - 回避策として、私はExcelで "Text to columns"を使用して、行を2つの別々の列に区切って区切り記号 "|"の下に分けて、元のコードを使用できるようにした。

質問:csvファイルでコードを動作させる方法はありますか?これは、数千の行を持つ大きなcsvファイルから画像を抽出する方がはるかに迅速かつ容易になります。

+1

は綿毛を削除してください - 挨拶ではない問題に含まれるように、これはQ&Aサイト、いないフォーラムです。さらに、あなたが試したこととあなたの問題点を説明してください。現在のところ、この問題はプログラミング上の問題ではありませんが、このサイトの目的ではない「私のためのコード全体を書いてください」となります。 – Polygnome

+0

実際には、このサイトからの提案http://stackoverflow.com/questions/15641717/download-files-pdf-from-web1には、正確な実行方法が示されています。 –

+0

あなたの研究がこれまでに作り出したことを教えてください。 "* vbaダウンロードファイル*"のgoogle検索で、https://stackoverflow.com/questions/17877389/how-do-i-download-a-file-using-vba-without-internet-explorerへ私を誘導しました。あなたはそれを試しましたか?同様に、 "* vba loop lines in file *"を検索すると、ファイルの内容を読み込むための多くの便利な(スタックオーバーフロー)ソリューションが得られます。それでも問題が解決しない場合は、正確にあなたのために働いていないものについてより具体的に質問を言い換えるべきです。 – Leviathan

答えて

0

VBAはExcel用の自動化を提供するので、手動で行うこともできるすべてのことをVBAによって自動化することができます。 Excelには、自動的にすべてのユーザーアクションをVBAコードに変換するマクロレコーダーが組み込まれています。この答えは、それがどのように機能するかについて説明します。Excel's Macro-Recorder usage

これはテキスト列に機能が生成するVBAコードの種類を確認するために使用することができます。あなたは少しのコードをクリーンアップする場合は、このVBAコマンドで終わる:

Selection.TextToColumns Destination:=Range("A1") _ 
         , DataType:=xlDelimited _ 
         , Other:=True _ 
         , OtherChar:="|" 

あなたがExcelにインポートされた全範囲でSelectionを交換したり、コードを実行する前に、あなたは全体の範囲を選択していることを確認します。また、Range("A1")を、結果を書き込む範囲で置き換えます。

ただし、後でこれらのセルを解析するために、Excelのセルに書き込むのは効率的ではありません。問題をより明確に解決するには、ダウンロードしたファイルを1行ずつ読み込み、必要に応じて各行を解析します。

は幸いにも、すでにそのためのソリューションがあります:Read lines from a text file but skip the first two lines

+0

私は手動で "テキストを列に" A1に適用し、元のスクリプトに結果のコードを追加するようにマクロを記録しようとしました。全体のプロセスは特に高速ではありません。あなたが提案した代替ソリューションを見て、元のコードにもっと効率的なmodを考え出すことができるかどうかを見ていきます。 –

関連する問題