web-dev-qa-db-ja.com

SharePointサイトからExcelファイルを開く

VBAを使用してSharePointからExcelファイルを開こうとしています。探しているファイルはマクロを実行するたびに異なる可能性があるため、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エクスプローラーに貼り付けると、SharePointフォルダーへのアクセスに問題がないため、パスが正しいことがわかります。

VBAが気に入らないのはなぜですか?

12
Pocahontas

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参照を有効にする必要があります。また、あなたのサイトはバックスラッシュを使用するかもしれません、私のものはスラッシュを使用します。

10
ARich

作成した次の関数を使用して、URLをWebDAVアドレスに変換します。この関数は、通常のシステムパスと無傷のUNCパスも返します。

この関数を呼び出すには、VBAプロジェクトのモジュールに追加し、ファイルダイアログコマンドの直後で、ファイルダイアログで選択したパスを使用する前にMyNewPathString = Parse_Resource(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

この関数は、ファイルパスがURLであり、安全か(HTTPS)安全でないか(HTTP)をチェックします。 URLの場合、SharePointのターゲットファイルに直接リンクできるように、適切なWebDAV文字列を作成します。

特に、SharePointファームと同じドメインに座っていない場合は、ファイルを開くたびにユーザーに資格情報の入力が求められます。

注: httpサイトでこれをテストしていませんが、動作することを確信しています。

7
Shrout1

スクリプトからhttp://sharepoint/my/fileをパスとして使用するのではなく、\\sharepoint\my\fileを使用することで動作するはずです。 C#で作成された私のプログラムで動作します。

1
Jacek

初期コードにタイプミスがあることに注意してください

MyNewPathString = ParseResource(myFileDialogStringVariable)

に置き換える必要があります

MyNewPathString = Parse_Resource(myFileDialogStringVariable)

アンダースコアが欠落していました。

1
Ed van Harmelen

私のアプローチを使用して、SharePointフォルダーをネットワークドライブとしてマップできます。その後、これまでと同じように進めることができます。

Excel VBAアップ-/複数のSharePointフォルダーからダウンロード

次に、Dirまたはファイルシステムオブジェクトを使用してファイルを参照することもできます。

0
psychicebola