2009-08-28 121 views
17

通常、このコードを使用してVBA内のフォルダのコンテンツを取得します。しかし、これはsharepointの場合には機能しません。どのようにできるのか ?Excel 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 

(shahkalpeshによる良好なコメントの後)EDIT

私は、Windowsエクスプローラのアドレスを入力する場合、私は、SharePointにアクセスすることができます。共有ポイントへのアクセスは認証が必要ですが、Windowsのログインに依存しているため透過的です。

+0

あなたは、Windowsエクスプローラを使用して、SharePointのフォルダに移動することができますか? – shahkalpesh

+0

はい!これは、通常のネットワークフォルダのように見えます。 – tachfine

答えて

8

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 

操作]メニューをドロップダウンし、Windowsエクスプローラで開く]を選択し、ドキュメントライブラリ内のフォルダに移動し、使用するUNCパスを取得するには。そこに表示されているパスをコピーして使用します。

+0

FileSystemObjectを有効にする方法については、[this](http://stackoverflow.com/questions/3233203/how-do-i-use-filesystemobject-in-vba)を参照してください。 – enderland

-2

sharepointライブラリをWindowsのドライブ文字にマッピングしてみてください。次に、コード内のドライブとパスを選択します。

2

IMHO WebDAV(ネットワークフォルダなし、これはしばしば許可されていないため)を経由するのが最もクールな方法です。これは、このexcellent article優れた記事(コードはExcelで直接使用することができます、最近の概念を使用)でレイアウトされたActiveX Data Objectsによって実現できます。

希望すると便利です。

http://blog.itwarlocks.com/2009/04/28/accessing-webdav-in-microsoft-word-visual-basic/

元のリンクが死んでいるが、少なくともテキストコンテンツがarchive.orgにまだ提供されています:持ちながら、私は、SharePoint上のファイルを操作するために見つけた唯一の方法 http://web.archive.org/web/20091008034423/http://blog.itwarlocks.com/2009/04/28/accessing-webdav-in-microsoft-word-visual-basic

+2

02/07/2013現在、この記事のリンクは死んでいるようです。この記事がまだ他の場所のどこにあるか知っていますか? – armstrhb

+1

@armstrhb:www.archive.orgにはコピーがありますが、グラフィックスではなくテキストしか利用できないようです。 – MostlyHarmless

11

WebDAVフォルダをドライブ文字にマップすることです。実装の例を次に示します。

VBAで、次のActiveXライブラリへの参照を追加します。

  • Windowsスクリプトホストオブジェクトモデル(wshom.ocx) - WshNetwork
  • Microsoftスクリプトランタイム(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 

次に、あなたのコード内でそれを実装することができます。SharePointコンテンツを取得する共有ポイントへ

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 
+0

は、ネットワークドライブをマッピングするのが難しい場合があります。私は[how-to-map-sharepoint](http://stemrc.aihec.org/SharePoint%20Tips%20and%20Tricks/Creating%20a%20Windows%20Drive%20Mapping%20for%20a%20SharePoint%20Document%20Library)を見つけました。 pdf)これを解決するのに役立ちます。 – Adriaan

+0

このコードは非常に有望ですが、 'Sub test()'は 'Dim dm as New DriveMapper'行に" User defined type not defined "コンパイルエラーを送出しています。おそらく私はDLLの参照が不足していますか? Microsoft Scripting RuntimeとWindows Script Host Object Modelを追加しました。 Excel 2010を使用しています。 – Shrout1

+0

とても遅い@ shrout1に応答して申し訳ありません、あなたはクラスの代わりにモジュールを作ったでしょうか? –

0

ドライブマッピング(もhttps)を

は、ファイルシステムオブジェクトとしてそれを反復マッピングされたドライブを介して私のために働きました;トリックマッピング設定する方法である: from sharepoint, open as explorer は、マップ内(HTTPとライン*)(下記参照)

address in explorer

使用このパスを(すなわちnet use N: https:://thepathyoujustcopied)エクスプローラまたはコマンドから車 注パスをコピー:httpsはWindows7/8で正常に動作し、XPでは動作しません。

あなたにとってはうまくいくかもしれませんが、私はドライブレターが各PCで異なるため、異なるアプローチが好まれます。ここでのトリックは、シェアポイントから始めることです(そして、SharepointをWebサーバーとしてアクセスするVBAスクリプトからではありません)。

は、シートにSharePointで

  • を得意としますが、2010年に(Excelへ
  • エクスポートビューを監視するビューを参照するには、データ接続をセットアップします:ライブラリツール; libarry | Excelへのエクスポート) export to excelこのExcelを表示したとき、あなたは(タブの設定データソースを見つけることができます
  • :データ、接続、プロパティ、定義)

connection tab

このクエリをvbaに含めるか、speadsheetでデータベースリンクを維持して、VBAでテーブルを反復することができます。注意:上記の画像には、 Sharepointにアクセスする方法を示す、実際のデータベース接続(コマンドテキスト)は表示されません。

+0

上記のリンクは2011年9月10日の時点で死んでいるようです。更新されたバージョンがあれば何か? – Shrout1

+0

リンクされた文書は私のものではありませんでした。記事に欠けている情報を追加しました。 – Adriaan

1

私はこの非常に問題に時間を費やしました。私は、ファイルを開く前に存在していたファイルを確認しようとしていました。

最終的に、私はXMLとSOAPを使用したソリューションを考え出しました.EnumerateFolderメソッドを使用して、フォルダの内容を含むXML応答を取得します。

私はそれについてブログしましたhere

0

私は少しのために、この問題で周り台無し、と非常にシンプルな、2行の解決策を見つけ、単に「HTTP」を交換すると、すべての前方には、次のようにスラッシュ:

myFilePath = replace(myFilePath, "/", "\") 
myFilePath = replace(myFilePath, "http:", "") 

それが動作しない場合があります加えて

myFilePath = replace(myFilePath, "https:", "") 
8

:あなたは安全なサイトを使用して(あるいはその両方に対応するために希望する)あなたは次の行を追加したい場合がありしている場合は皆のために、それは私

のために働い

myFilePath = replace(myFilePath, "/", "\") 
myFilePath = replace(myFilePath, "http:", "") 

もスペースを置き換える:

myFilePath = replace(myFilePath, " ", "%20") 
関連する問題