通常、このコードを使用して、VBAのフォルダーのコンテンツを取得します。しかし、これは共有ポイントの場合には機能しません。どのようにできるのか ?
Dim folder As folder
Dim f As File
Dim fs As New FileSystemObject
Set folder = fs.GetFolder("//sharepoint.address/path/to/folder")
For Each f In folder.Files
'Do something
Next f
[〜#〜] edit [〜#〜](shahkalpeshによる良いコメントの後):
Windowsエクスプローラーでアドレスを入力すると、共有ポイントにアクセスできます。共有ポイントへのアクセスには認証が必要ですが、Windowsログインに依存しているため、透過的です。
サーバーの権限が必要なときにSharePoint上のファイルを操作することがわかった唯一の方法は、WebDAVフォルダーをドライブ文字にマップすることです。実装の例を次に示します。
VBAで次のActiveXライブラリへの参照を追加します。
wshom.ocx
)-WshNetworkの場合scrrun.dll
)-FileSystemObjectの場合新しいクラスモジュールを作成し、DriveMapper
と呼び、次のコードを追加します。
Option Explicit
Private oMappedDrive As Scripting.Drive
Private oFSO As New Scripting.FileSystemObject
Private oNetwork As New WshNetwork
Private Sub Class_Terminate()
UnmapDrive
End Sub
Public Function MapDrive(NetworkPath As String) As Scripting.Folder
Dim DriveLetter As String, i As Integer
UnmapDrive
For i = Asc("Z") To Asc("A") Step -1
DriveLetter = Chr(i)
If Not oFSO.DriveExists(DriveLetter) Then
oNetwork.MapNetworkDrive DriveLetter & ":", NetworkPath
Set oMappedDrive = oFSO.GetDrive(DriveLetter)
Set MapDrive = oMappedDrive.RootFolder
Exit For
End If
Next i
End Function
Private Sub UnmapDrive()
If Not oMappedDrive Is Nothing Then
If oMappedDrive.IsReady Then
oNetwork.RemoveNetworkDrive oMappedDrive.DriveLetter & ":"
End If
Set oMappedDrive = Nothing
End If
End Sub
その後、コードに実装できます。
Sub test()
Dim dm As New DriveMapper
Dim sharepointFolder As Scripting.Folder
Set sharepointFolder = dm.MapDrive("http://your/sharepoint/path")
Debug.Print sharepointFolder.Path
End Sub
HTTPではなくUNCパスを使用します。このコードは機能します:
Public Sub ListFiles()
Dim folder As folder
Dim f As File
Dim fs As New FileSystemObject
Dim RowCtr As Integer
RowCtr = 1
Set folder = fs.GetFolder("\\SharePointServer\Path\MorePath\DocumentLibrary\Folder")
For Each f In folder.Files
Cells(RowCtr, 1).Value = f.Name
RowCtr = RowCtr + 1
Next f
End Sub
使用するUNCパスを取得するには、ドキュメントライブラリのフォルダーに移動し、[アクション]メニューをドロップダウンして、[エクスプローラーで開く]を選択します。そこに表示されるパスをコピーして使用します。
に加えて:
myFilePath = replace(myFilePath, "/", "\")
myFilePath = replace(myFilePath, "http:", "")
スペースも置き換えます:
myFilePath = replace(myFilePath, " ", "%20")
私見で最もクールな方法は、WebDAVを使用することです(これは多くの場合許可されないため、ネットワークフォルダーなしで)。これは、 excellent article excellent article(コードはExcelで直接使用でき、最近コンセプトを使用しました)に記載されているように、ActiveXデータオブジェクトを介して実現できます。
お役に立てれば!
http://blog.itwarlocks.com/2009/04/28/accessing-webdav-in-Microsoft-Word-visual-basic/
元のリンクは無効ですが、少なくともテキストコンテンツはarchive.orgで引き続き利用可能です。 http://web.archive.org/web/20091008034423/http://blog.itwarlocks.com/2009/ 04/28/accessing-webdav-in-Microsoft-Word-visual-basic
私は少しこの問題をいじり、非常に単純な2行の解決策を見つけました。「http」とこのようなすべてのスラッシュを単純に置き換えます。
myFilePath = replace(myFilePath, "/", "\")
myFilePath = replace(myFilePath, "http:", "")
それは誰にとってもうまくいくとは限りませんが、私にとってはうまくいきました
セキュリティで保護されたサイトを使用している場合(または両方に対応したい場合)、次の行を追加できます。
myFilePath = replace(myFilePath, "https:", "")
私はこの問題に少し時間を費やしました-ファイルを開く前に存在することを確認しようとしていました。
最終的に、XMLとSOAP-EnumerateFolderメソッドを使用して、フォルダーのコンテンツを含むXML応答をプルするソリューションを使用しました。
私はそれについてブログに書いた こちら 。
ドライブポイントを共有ポイント(httpsも)にマッピング
共有されたドライブをファイルシステムオブジェクトとして反復することにより、共有ポイントのコンテンツを取得することができました。トリックは、マッピングを設定する方法です。 次に、パスをコピーします(http *を含む行)(以下を参照)
エクスプローラーまたはコマンドからマップドライブでこのパスを使用します(つまり、Net Use N: https:://thepathyoujustcopied
)注:httpsは、Windows 7/8では問題なく機能しますが、XPでは機能しません。
それはあなたのために働くかもしれませんが、ドライブ文字が各PCで異なるので、私は異なるアプローチを好みます。ここでのコツは、sharepointから開始することです(webサーバーとしてsharepointにアクセスするVBAスクリプトからではありません)。
Excelシートへのデータ接続を設定する
このクエリをvbaに含めるか、speadsheetでデータベースリンクを維持して、VBAによってテーブルを反復処理できます。注意:上記の画像は実際のデータベース接続(コマンドテキスト)を示していないため、my共有ポイントにアクセスする方法がわかります。