2013-10-21 3 views
8

से एक्सेल फ़ाइल खोलें मैं VBA का उपयोग कर SharePoint से Excel फ़ाइल खोलने का प्रयास कर रहा हूं। क्योंकि जब भी मैं मैक्रो चलाता हूं, तो मैं जिस फ़ाइल को ढूंढ रहा हूं वह भिन्न हो सकता है, मैं SharePoint फ़ोल्डर को देखने में सक्षम होना चाहता हूं और मुझे जिस फ़ाइल की आवश्यकता है उसका चयन करना चाहते हैं।SharePoint साइट

नीचे दिया गया कोड ठीक काम करता है जब मैं किसी नेटवर्क ड्राइव पर फ़ाइल देखना चाहता हूं, हालांकि जब मैं इसे किसी SharePoint पते से प्रतिस्थापित करता हूं तो मुझे "रन-टाइम त्रुटि 76: पथ नहीं मिला" मिलता है।

Sub Update_monthly_summary() 

Dim SummaryWB As Workbook 
Dim SummaryFileName As Variant 

ChDir "http://sharepoint/my/file/path" 
SummaryFileName = Application.GetOpenFilename("Excel-files,*.xls", _ 
1, "Select monthly summary file", , False) 
If SummaryFileName = False Then Exit Sub 

Set SummaryWB = Workbooks.Open(SummaryFileName) 

End Sub 

जब मैं Windows Explorer में इस पते पेस्ट मैं SharePoint फ़ोल्डर में पहुंचने के कोई समस्या नहीं है, इसलिए मुझे पता है कि पथ सही है।

वीबीए ऐसा क्यों नहीं करता है? इस तरह

+0

'ChDir()' और 'GetOpenFilename' http पर काम नहीं करते हैं, लेकिन आप http रूट के बजाय शेयरपॉइंट" वेबडाव "पथ का उपयोग करने का प्रयास कर सकते हैं। –

+0

फ़ाइल को लिंक करने के लिए आपको एक वेबडीवी पता का उपयोग करने की आवश्यकता है; एक्सेल इसे नेटवर्क स्थान की तरह व्यवहार करेगा। नीचे दिए गए मेरे उत्तर को उस फ़ंक्शन के लिए देखें जो URL को आपके लिए WebDAV पते में पार्स करता है। – Shrout1

उत्तर

6

एक SharePoint साइट से किसी फ़ाइल के लिए इस कोड का प्रयास करें:

Dim SummaryWB As Workbook 
Dim vrtSelectedItem As Variant 

With Application.FileDialog(msoFileDialogOpen) 
    .InitialFileName = "https://sharepoint.com/team/folder" & "\" 
    .AllowMultiSelect = False 
    .Show 
    For Each vrtSelectedItem In .SelectedItems 
     Set SummaryWB = Workbooks.Open(vrtSelectedItem) 
    Next 
End With 

If SummaryWB Is Nothing then Exit Sub 

अगर मैं सही ढंग से याद, Microsoft Scripting Runtime संदर्भ सक्षम होना चाहिए। साथ ही, आपकी साइट बैकस्लाश का उपयोग कर सकती है, मेरा आगे स्लैश का उपयोग करता है।

-1

कोशिश कुछ:

Shell ("C:\Program Files\Internet Explorer\iexplore.exe http://sharepoint/my/file/path") 

यह मेरे लिए काम किया।

1

आपकी स्क्रिप्ट से http://sharepoint/my/file पथ के रूप में उपयोग नहीं करते हैं, बल्कि \\sharepoint\my\file और फिर काम करना चाहिए। यह सी # में किए गए मेरे कार्यक्रमों के लिए काम करता है।

4

मैं यूआरएल को मेरे द्वारा बनाए गए निम्नलिखित फ़ंक्शन का उपयोग करके वेबडावी पते में बदल देता हूं। यह फ़ंक्शन नियमित सिस्टम पथ और यूएनसी पथों को बेकार भी देता है।

इसे अपने वीबीए प्रोजेक्ट में मॉड्यूल में जोड़कर और फ़ाइल फ़ाइल संवाद द्वारा चुने गए पथ का उपयोग करने से पहले MyNewPathString = ParseResource(myFileDialogStringVariable) दर्ज करके इस फ़ंक्शन को कॉल करें। फिर लक्ष्य फ़ाइल स्थान का उपयोग करते समय "MyNewPathString" का संदर्भ लें।

Public Function Parse_Resource(URL As String) 
'Uncomment the below line to test locally without calling the function & remove argument above 
'Dim URL As String 
Dim SplitURL() As String 
Dim i As Integer 
Dim WebDAVURI As String 


'Check for a double forward slash in the resource path. This will indicate a URL 
If Not InStr(1, URL, "//", vbBinaryCompare) = 0 Then 

    'Split the URL into an array so it can be analyzed & reused 
    SplitURL = Split(URL, "/", , vbBinaryCompare) 

    'URL has been found so prep the WebDAVURI string 
    WebDAVURI = "\\" 

    'Check if the URL is secure 
    If SplitURL(0) = "https:" Then 
     'The code iterates through the array excluding unneeded components of the URL 
     For i = 0 To UBound(SplitURL) 
      If Not SplitURL(i) = "" Then 
       Select Case i 
        Case 0 
         'Do nothing because we do not need the HTTPS element 
        Case 1 
         'Do nothing because this array slot is empty 
        Case 2 
        'This should be the root URL of the site. Add @ssl to the WebDAVURI 
         WebDAVURI = WebDAVURI & SplitURL(i) & "@ssl" 
        Case Else 
         'Append URI components and build string 
         WebDAVURI = WebDAVURI & "\" & SplitURL(i) 
       End Select 
      End If 
     Next i 

    Else 
    'URL is not secure 
     For i = 0 To UBound(SplitURL) 

      'The code iterates through the array excluding unneeded components of the URL 
      If Not SplitURL(i) = "" Then 
       Select Case i 
        Case 0 
         'Do nothing because we do not need the HTTPS element 
        Case 1 
         'Do nothing because this array slot is empty 
         Case 2 
        'This should be the root URL of the site. Does not require an additional slash 
         WebDAVURI = WebDAVURI & SplitURL(i) 
        Case Else 
         'Append URI components and build string 
         WebDAVURI = WebDAVURI & "\" & SplitURL(i) 
       End Select 
      End If 
     Next i 
    End If 
    'Set the Parse_Resource value to WebDAVURI 
    Parse_Resource = WebDAVURI 
Else 
'There was no double forward slash so return system path as is 
    Parse_Resource = URL 
End If 


End Function 

इस समारोह यदि आपकी फ़ाइल पथ एक यूआरएल है और अगर यह सुरक्षित है (HTTPS) या सुरक्षित नहीं (HTTP) की जाँच करेगा। यदि यह एक यूआरएल है तो यह उचित WebDAV स्ट्रिंग का निर्माण करेगा ताकि आप सीधे SharePoint में लक्ष्य फ़ाइल से लिंक कर सकें।

उपयोगकर्ता को प्रत्येक बार फ़ाइल खोले जाने पर प्रमाण-पत्रों के लिए संकेत दिया जाएगा, खासकर यदि वे आपके शेयरपॉइंट फार्म के समान डोमेन पर नहीं बैठे हैं।

कृपया ध्यान दें: मैंने इसे http साइट के साथ परीक्षण नहीं किया है, हालांकि मुझे विश्वास है कि यह काम करेगा।

+0

इसके अलावा, यह उत्तर Windows XP के भीतर काम नहीं करता है क्योंकि Windows XP WebDAV का समर्थन नहीं करता है। तो विन 7 और केवल नए। – Shrout1

0

आप नेटवर्क ड्राइव के रूप में SharePoint फ़ोल्डर को मैप करने के लिए अपने दृष्टिकोण का उपयोग कर सकते हैं। फिर आप आगे बढ़कर आगे बढ़ सकते हैं।

Excel VBA Up-/Download from multiple SharePoint folders

तो फिर तुम भी Dir या फाइल सिस्टम ऑब्जेक्ट के साथ फ़ाइलों के माध्यम से ब्राउज़ कर सकते हैं

0

कृपया ध्यान दें कि अपने प्रारंभिक कोड लिखने में कोई गलती

MyNewPathString = ParseResource(myFileDialogStringVariable) 

साथ प्रतिस्थापित किया जाना चाहिए है
MyNewPathString = Parse_Resource(myFileDialogStringVariable) 

अंडरस्कोर गुम था।