私はExcel 2013でワークフローを最適化するためにいくつかのVBAを作成していますが、Windows 10マシンを使用しています。 は、私は以下のとおり、ファイル名に特定のコンテンツを探しているファイル構造を横断する単純な再帰プロシージャを使用します。私は何が起こるかを把握するために、いくつかのデバッグを行っている
Function filePathToList(fileStart As String, firstString As String, secondString As String) As String
Dim FileSystem As Object
Dim HostFolder As String
HostFolder = fileStart
Set FileSystem = CreateObject("Scripting.FileSystemObject")
filePathToList = DoFolder(FileSystem.GetFolder(HostFolder), LCase(firstString), LCase(secondString))
End Function
Function DoFolder(Folder, firstString As String, secondString As String) As String
Dim SubFolder
For Each SubFolder In Folder.SubFolders
DoFolder = DoFolder(SubFolder, firstString, secondString)
Next
Dim File
For Each File In Folder.Files
If (InStr(1, LCase(File.name), firstString) > 0) And (InStr(1, LCase(File.name), secondString) > 0) Then
DoFolder = Folder.Path & "\" & File.name
Debug.Print DoFolder
Debug.Print File.name
Debug.Print File
Exit Function
End If
Next
End Function
、と私はmned * Dだろうが、 VBAは私見つかったファイルの接頭辞として "〜$" を追加することを決定:
X:\05_Sputnik\T\Pony\_New_building_YYYYpp_\~$Komplettlista_Mamma mu.xlsx
~$Komplettlista_Mamma mu.xlsx
X:\05_Sputnik\T\Pony\_New_building_YYYYpp_\~$Komplettlista_Mamma mu.xlsx
私が見る方法をそれは完全なパスは次のとおりです。 X:\ 05_Sputnik \ T \ Pony_New_building_YYYYpp_ \ Komplettlista_Mamma mu.xlsx とVBAそれを開こうとしたときにそれを見つけられなかったことを訴えるので、私は同意します。
私は部分文字列抽出を行うことでこれを解決できますが、それはあまり素敵ではありません。私の質問は、しかしです。
これはどうしてですか?
ファイルは、予想される場所と似た名前の隠しファイルがありません。 Windowsは私にトリックをしていますか?
'〜$'ファイルは、ブックを開くとき(または他の誰かがブックを開くとき)に作成された一時的なロックファイルです。ワークブックを閉じたときにそれらを再度削除する必要がありますが、Excelがクラッシュしたり類似していると残ってしまうことがあります。 (注:テンポラリファイルは単にダミーファイルであるか、誰がファイルを開いているのかというユーザーIDが入っているかもしれませんが、Excelワークブックではありません)。 – YowE3K
フォルダ内の各ファイルを繰り返し処理します。ファイルWindowsは一時的にそのファイルのロックを作成していますか?したがって、ファイル名の残りの部分で一致が見つかった場合、その名前が返されます。 – kjbergman
いいえ - ロックファイルは、ファイルが現在Excelで開いている場合(マクロが入っているファイルなど)、または以前はExcelで開いていても正しく閉じられていない場合にのみ作成されます。あなたのコードは、ファイルを実際に開くことなく、ディレクトリ内のファイルを繰り返し処理するだけです.Windows Explorerでフォルダを見た場合と同じファイルが表示されるはずです(WEに「隠しファイルを表示」が有効になっていると仮定します)。 – YowE3K