2013-07-02 6 views
6

मुझे निम्न त्रुटि मिल रही है।एक्सेल 2013 वीबीए त्रुटि

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

यह एक्सेल 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 

उत्तर

9

आपको इसे Office के 64 बिट संस्करण पर चलाना होगा जबकि पहले आप 32 बिट संस्करण का उपयोग कर रहे थे।

32 बिट 64 बिट करने के लिए आप आम तौर पर कार्य करने के लिए जोड़ सकते हैं और PtrSafeLongPtr को Long से डेटा प्रकार के कुछ परिवर्तित (जो केवल एक बड़ा डेटाप्रकार है करने के लिए है कॉल परिवर्तित करने के लिए (देखें: 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 बिट संस्करणों आप एक पूर्वप्रक्रमक का उपयोग करने के बयान तो कार्यालय जानता है जो उपयोग करने के लिए कार्य करते हैं की जरूरत है पर इसका उपयोग करने में सक्षम होना चाहते Ie:।

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

बहुत बहुत धन्यवाद, लेकिन मुझे शेष कोड भी जोड़ना चाहिए था। त्रुटि जो मुझे पहले ठीक हो रही थी धन्यवाद धन्यवाद, लेकिन मुझे त्रुटि मिल रही है कि 'रेट' वैरिएबल परिभाषित नहीं है। – Mowgli

+1

कोई जांच नहीं। आपको 'लांग' से 'LongPtr' तक' रेट' वैरिएबल को कन्वर्ट करने की भी आवश्यकता है क्योंकि यह फ़ंक्शन के लिए नया रिटर्न प्रकार है। (यदि यह एक वैश्विक चर है तो 'Dim' के बजाय 'सार्वजनिक' (या केवल उस मॉड्यूल के लिए 'निजी') का उपयोग करें – CuberChase

+0

हाय, मुझे खेद है कि मुझे अभी समय मिल गया है। लेकिन मैंने LongPtr जोड़ने की कोशिश की और सार्वजनिक भी कोशिश की लेकिन यह काम नहीं किया। मुझे क्या करना चाहिए? धन्यवाद – Mowgli

2

MSDN reference

पूरा त्रुटि संदेश: इस परियोजना में कोड 64-बिट सिस्टम पर उपयोग के लिए अद्यतन किया जाना चाहिए। कृपया बयान और घोषित करें और अपडेट करें, फिर उन्हें PtrSafe विशेषता के साथ चिह्नित करें। माइक्रोसॉफ्ट ऑफिस के 64-बिट संस्करणों में चलते समय सभी घोषणा विवरणों को में अब PtrSafe कीवर्ड शामिल करना होगा। पीआरटीएसएफ़ कीवर्ड इंगित करता है कि माइक्रोसॉफ्ट ऑफिस के 64-बिट संस्करणों में चलाने के लिए एक घोषणा कथन सुरक्षित है। PtrSafe कीवर्ड को एक घोषणा कथन में जोड़ना केवल घोषित कथन स्पष्ट रूप से 64-बिट्स को लक्षित करता है, को 64-बिट्स (वापसी मूल्यों और पैरामीटर समेत) को स्टोर करने की आवश्यकता है, को अभी भी 64 रखने के लिए संशोधित किया जाना चाहिए पॉइंटर्स और हैंडल के लिए 64-बिट इंटीग्रल या LongPtr के लिए LongLong का उपयोग कर-बिट मात्रा।

PtrSafe कीवर्ड जोड़ें।

संबंधित मुद्दे