2017-03-01 6 views
0

このコードは、ディレクトリ内のファイルをループし、OLEDB接続文字列とテキストを修正します。特定のフォルダ内のExcelファイルを再帰的に移動し、ファイル内のすべてのワークブック接続インスタンスを更新する方法

Sub LoopThroughFiles() 

FolderName = "C:\Files\" 
If Right(FolderName, 1) <> Application.PathSeparator Then FolderName = FolderName & Application.PathSeparator 
Fname = Dir(FolderName & "*.xls") 

'loop through the files 
Do While Len(Fname) 

    With Workbooks.Open(FolderName & Fname) 

      With ActiveWorkbook.Connections("MYCONNECTION").OLEDBConnection 
       .CommandText = Array("NEWNAME") 
       .CommandType = xlCmdCube 
       .Connection = Array(_ 
       "OLEDB;Provider=MSOLAP.5;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=MyCube;Data Source=server.domain.net\OLAP;MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error;Update Isolation Level=2" _ 
       ) 
       .RefreshOnFileOpen = True 
       .SavePassword = False 
       .SourceConnectionFile = "" 
       .MaxDrillthroughRecords = 1000 
       .ServerCredentialsMethod = xlCredentialsMethodIntegrated 
       .AlwaysUseConnectionFile = False 
       .RetrieveInOfficeUILang = True 
      End With 
      With ActiveWorkbook.Connections("MYCONNECTION") 
       .Name = "MYCONNECTION" 
       .Description = "" 
      End With 
       ActiveWorkbook.Close SaveChanges:=True 
    End With 

    ' go to the next file in the folder 
    Fname = Dir 

Loop 

End Sub 

私はそれを再帰的に指定されたディレクトリをスキャンしても、サブディレクトリで見つかったすべての.xlsファイルを修正なるように、これをアップグレードしたいと思います。

さらに、多くのファイルに接続(例:MYCONNECTION、MYCONNECTION1、MYCONNECTION2、MYCONNECTION3、...)のインスタンスが多数あり、同じOLEDB文字列を修正する必要があるため、ワークブック接続のすべてのインスタンスにテキスト名を入力します。

ご協力いただければ幸いです。 :)

+1

FileSystemObjectを見てください。 –

答えて

0

dirを再帰的に使用することはできません。代わりにfileSystemObjectを使用してください。 stackOverflowにVB6の例があります。また、VBAでも動作するはずです(Microsoft scripting Runtimeを参照として追加してください)。