2017-03-07 22 views
0

私は6つのサブフォルダと〜300のExcelワークブック(毎日成長する)を持つディレクトリを持っています。 各ワークブックには、サーバーパスに保存されたCSVデータダンプを参照する複数の式(ブックごとに〜1200)があります。複数のExcelワークブックで数式内の特定の文字列を検索して置き換えます

私の問題は、CSVデータダンプを「ダーティデータ」として扱い、リンクを更新できないと主張してブックを開くたびに警告を表示することです(ただし、リンクがチェックされていれば問題ありません)。 私の研究では、データソースを.xslファイルに置き換える以外に、これを修正する方法がないようですが、excelには問題の参照はありません。

〜300ブックの検索と置換を実行し、数式内のCSVサーバーパスを見つけて.xlsファイルの新しいサーバーパスに置き換えます。

私は「SobolsoftのExcelの検索と置換」ソフトウェアを試しましたが、これは数式の内部を見て交換したくないようです。私は "Easy-XL"と "Kutools"の両方を使用していました。オープンワークブックでのみ動作します(20-50のワークブックを一度に開く必要があった場合は、検索と置換を実行してから次のバッチ)、いずれもどちらも仕事したくなかった。私はそれが役立つだろう場合は完全に

Const cStartFolder = "M:\Transfer\DrillHole_Interaction\4.For_Survey" 'no slash at end 
Const cFileFilter = "*.xlsm" 
Const cPassword = "" 'use empty quotes if blank 

Sub UnprotectAllWorksheets() 
Dim i As Long, j As Long, arr() As String, wkb As Workbook, wks As Worksheet 

ExtractFolder cStartFolder, arr() 

On Error Resume Next 
j = -1: j = UBound(arr) 
On Error GoTo 0 

For i = 0 To j 
    Set wkb = Workbooks.Open(arr(i), False) 
    For Each wks In wkb.Worksheets 
     wks.Protect cPassword, True, True 
    Next 
    wkb.Save 
    wkb.Close 
Next 
End Sub 

Sub ExtractFolder(Folder As String, arr() As String) 
Dim i As Long, objFS As Object, objFolder As Object, obj As Object 

Set objFS = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFS.GetFolder(Folder) 

For Each obj In objFolder.SubFolders 
    ExtractFolder obj.Path, arr() 
Next 

For Each obj In objFolder.Files 
    If obj.Name Like cFileFilter Then 
     On Error Resume Next 
     i = 0: i = UBound(arr) + 1 
     On Error GoTo 0 
     ReDim Preserve arr(i) 
     arr(i) = objFolder.Path & Application.PathSeparator & obj.Name 
    End If 
Next 
End Sub 

働くディレクトリ内の各ワークブックを保護/保護解除するには、以下のマクロを使用しました

、私は「マスター」ワークブックおよびコピーからもコピーに開いています特定の範囲を他のワークブックにコピーします(各書籍の範囲を範囲にコピーします)。しかし、私は知恵の終わりであり、進行方法はわかりません。 ご協力いただければ幸いです。

答えて

0

すべての公式内のcsvフルネーム(パス&ファイル名)を検索して置換する必要はなく、各ワークブック内のリンク元を一度に変更するだけです。

変更が必要なすべてのワークブックでループ内でこれを試してください。 csvファイルのパスと名前がために:

WbkTarget.Fullname:CsvFile.Fullname

を交換するリンクを含むブックのパスと名前

Dim Wbk As Workbook 

    Application.DisplayAlerts = False 
    Set Wbk = Workbooks.Open(Filename:="WbkTarget.Fullname", UpdateLinks:=3) 
    With Wbk 
     .ChangeLink _ 
      Name:="CsvFile.Fullname", _ 
      NewName:="XlsFile.Fullname", _ 
      Type:=xlExcelLinks 
     .Save 
     .Close 
    End With 
    Application.DisplayAlerts = True 

置き換えられた

XlsFile.Fullname:csvファイルに置き換わるxlsのパスと名前

+0

もちろん... ... なぜ私は以前のことを考えていませんでした。それは、私がやろうとしていたものよりずっと簡単です... 私は私のプロテクト/すぐにやった! ありがとう! –

関連する問題