I am getting following error.
Compile error: The code in this project must be updated for use on 64-bit systems.
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\"
It works fine in Excel 2010.
Error I get is
Ret Variable Not defined. Here’s the rest of the code.
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 & ".mp3" 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
You must be running this on a 64Bit version of Office whereas previously you were using a 32Bit version.
To convert 32Bit calls to 64Bit you generally have to add
PtrSafe to the function and convert some of the data types from
LongPtr (which is merely a larger datatype (see: http://msdn.microsoft.com/en-us/library/office/gg251378.aspx)
So the converted function would be:
Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" _ Alias "URLDownloadToFileA" _ (ByRef pCaller As LongPtr, _ ByVal szURL As String, _ ByVal szFileName As String, _ ByVal dwReserve As Long, _ ByRef lpfnCB As LongPtr) _ As LongPtr
Edit: Note if you want to be able to use this on both 64Bit and 32Bit versions of Office you need to use a preprocessor If statement so Office knows which function to use. Ie:
#If Win64 Then Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon"....... #Else Private Declare Function URLDownloadToFile Lib "urlmon"....... #End If
Complete error message:
The code in this project must be updated for
use on 64-bit systems. Please review and update Declare statements and
then mark them with the PtrSafe attribute. All Declare Statements must
now include the PtrSafe keyword when running in 64-bit versions of
Microsoft Office. The PtrSafe keyword indicates a Declare statement is
safe to run in 64-bit versions of Microsoft Office. Adding the PtrSafe
keyword to a Declare statement only signifies the Declare statement
explicitly targets 64-bits, all data types within the statement that
need to store 64-bits (including return values and parameters) must
still be modified to hold 64-bit quantities using either LongLong for
64-bit integrals or LongPtr for pointers and handles.