6

次のエラーが発生します。

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 では問題なく動作します。

ありがとう。

編集

私が得るエラーはです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
4

2 に答える 2

9

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

32Bit 呼び出しを 64Bit に変換するには、通常PtrSafe、関数に追加して、一部のデータ型を からLongに変換する必要がありますLongPtr(これは単なるより大きなデータ型です ( 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

編集: Office の 64 ビット バージョンと 32 ビット バージョンの両方でこれを使用できるようにする場合は、Office が使用する関数を認識できるように、プリプロセッサの If ステートメントを使用する必要があることに注意してください。すなわち:

#If Win64 Then
    Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon".......
#Else
    Private Declare Function URLDownloadToFile Lib "urlmon".......
#End If
于 2013-07-02T22:34:14.523 に答える
2

MSDN リファレンス

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

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

于 2013-07-02T22:32:41.700 に答える