2017-02-12 14 views
0

2つの列AとBを持つExcelシートがあります。列Aには名前があり、列Bには画像URLがあります。URLから画像をダウンロードして名前を変更する

私はすべての画像をダウンロードしてA列の名前に変更したいと思います。ここで検索しましたが、これまでの解決策がありましたが、私のバージョンのExcelでは動作しません/ PC私はエラーを取得するよう:

「64ビットシステム上で使用するために更新されなければならないプロジェクトに

にコードをコンパイルエラー確認してくださいと更新がPtrSafe属性でそれらをマークし、その後のステートメントを宣言します。」。ここで

は前のポストです:GET pictures from a url and then rename the picture

は、このに関する任意の助けに感謝し、大好きです!

+0

@Amorpheuses: "インストールされているOfficeの最新バージョンと64ビットマシンを" あなたを置き換えます「最新の32ビットバージョンのOfficeがインストールされた64ビットマシン」 –

+0

私のWindows版に間違ったバージョンのオフィスをインストールした可能性はありますか? –

+0

私は、64ビットのWindowsシステムでは、64ビットのOfficeバージョンを間違ったバージョンと呼んでいません。しかし、明示的に 'Declare'文を使用すると、それは32ビット版とは異なります。 [Officeの32ビット版と64ビット版の互換性](https://msdn.microsoft.com/en-us/library/office/ee691831(v = office.14).aspx)を参照してください。 @Amorpheusesは、64ビットWindowsを使用して彼のために働くと述べていました。しかし、それは64ビットWindowsで32ビットOfficeを実行している場合にのみ当てはまります。 –

答えて

1

は、GET pictures from a url and then rename the pictureのものと同じにする必要があります。しかし、それはシステム機能を使用するのではなくネイティブのExcel VBAだけを使用するので、32ビットまたは64ビットのOfficeを使用するかどうかは関係ありません。

Sheet1

enter image description here

コード:

Const FolderName As String = "P:\Test\" 

Sub downloadJPGImages() 

Set ws = ActiveWorkbook.Sheets("Sheet1") 
lLastRow = ws.Range("A" & Rows.Count).End(xlUp).Row 

Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.6.0") 
Set oBinaryStream = CreateObject("ADODB.Stream") 
adTypeBinary = 1 
oBinaryStream.Type = adTypeBinary 

For i = 2 To lLastRow 
    sPath = FolderName & ws.Range("A" & i).Value & ".jpg" 
    sURI = ws.Range("B" & i).Value 

    On Error GoTo HTTPError 
    oXMLHTTP.Open "GET", sURI, False 
    oXMLHTTP.Send 
    aBytes = oXMLHTTP.responsebody 
    On Error GoTo 0 

    oBinaryStream.Open 
    oBinaryStream.Write aBytes 
    adSaveCreateOverWrite = 2 
    oBinaryStream.SaveToFile sPath, adSaveCreateOverWrite 
    oBinaryStream.Close 

    ws.Range("C" & i).Value = "File successfully downloaded as JPG" 

NextRow: 
Next 

Exit Sub 

HTTPError: 
ws.Range("C" & i).Value = "Unable to download the file" 
Resume NextRow 

End Sub 
関連する問題