私は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
働くディレクトリ内の各ワークブックを保護/保護解除するには、以下のマクロを使用しました
、私は「マスター」ワークブックおよびコピーからもコピーに開いています特定の範囲を他のワークブックにコピーします(各書籍の範囲を範囲にコピーします)。しかし、私は知恵の終わりであり、進行方法はわかりません。 ご協力いただければ幸いです。
もちろん... ... なぜ私は以前のことを考えていませんでした。それは、私がやろうとしていたものよりずっと簡単です... 私は私のプロテクト/すぐにやった! ありがとう! –