2013-07-02 34 views
6

次のエラーが発生しています。Excel 2013 VBAエラー

Compile error: The code in this project must be updated for use on 64-bit systems. 

VBAコード

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\" 

これは、Excel 2010で

感謝を正常に動作します。私が手

EDIT

エラーがRet Variable Not definedです。残りのコードは次のとおりです。

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 

答えて

9

以前は32ビット版を使用していたのに対し、これは64ビット版のOfficeで実行する必要があります。

は、32ビットを使用すると、一般的に関数に PtrSafeを追加し、より大きなデータ型が単にある( LongPtrLongからのデータ型の一部を変換する必要があり、64ビットへの呼び出しに変換するには(参照:だから、変換機能 http://msdn.microsoft.com/en-us/library/office/gg251378.aspx

を次のようになります。

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 

編集:あなたはオフィスの両方の64 - および32ビットバージョンでこれを使用することができるようにしたい場合は文がそうOfficeが使用するために機能するかを知っている場合は、プリプロセッサを使用する必要がありますすなわち:。

#If Win64 Then 
    Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon"....... 
#Else 
    Private Declare Function URLDownloadToFile Lib "urlmon"....... 
#End If 
+0

ありがとうございますが、残りのコードも追加する必要があります。前回のエラーは修正されましたが、 'Ret'変数が定義されていないというエラーが発生しています。 – Mowgli

+1

probsはありません。 'Ret'変数を' Long'から 'LongPtr'に変換する必要があります。これは、関数の新しい戻り値の型であるためです。 (グローバル変数の場合は、 'Dim'の代わりに' Public'(またはそのモジュールだけに 'Private')を使用してください) – CuberChase

+0

こんにちは、すみません。私はLongPtrを追加しようとしましたが、Publicを試みましたが、うまくいきませんでした。私は何をすべきか?ありがとう – Mowgli

2

MSDN reference

完全なエラーメッセージ: このプロジェクトのコードは、64ビットシステム上の 使用するために更新する必要があります。 Declareステートメントを確認して更新し、 をPtrSafe属性でマークしてください。 Microsoft Officeの64ビットバージョンで実行する場合、すべてのDeclareステートメントにPtrSafeキーワードが含まれている必要があります。 PtrSafeキーワードは、Declareステートメントが で、Microsoft Officeの64ビットバージョンで実行するのに安全であることを示しています。 DeclareステートメントにPtrSafeキーワードを追加すると、 は明示的に64ビットをターゲットとし、 は64ビット(戻り値およびパラメータを含む)を格納する必要があるステートメント内のすべてのデータ型は、 はまだ64を保持するように変更する必要があります。 の場合はLongLong、ポインタとハンドルの場合はLongPtrを使用します。

PtrSafeというキーワードを追加します。