それは
すべてのリンク先のパスを収集するものは何でも(リンクやフォルダを削除しない限り...)
しかも私は一つだけWscript.Shell
オブジェクトを初期化し、それをそのCreateShortcut()
へのすべてのコールを処理し、代わりに
は最終的に私自身がDir()
機能の代わりにFileSystemObject
の使用に向けて漂流していた各リンクのための一つのオブジェクトをインスタンス化のためにお勧めしたいです、問題のために私は時々後者と会う。
代わり
Option Explicit
Sub main()
Dim startPath As String
Dim myLinkTargetPaths As New Collection, myLinkFilePaths As Collection
startPath = "C:\myPath\"
Set myLinkFilePaths = GetLinksPaths(startPath) 'first get the collection of all links path
Set myLinkTargetPaths = GetLinksTarget(myLinkFilePaths) ' then get the collection of all links TargetPaths
End Sub
Function GetLinksTarget(myLinkFilePaths As Collection) As Collection
Dim myColl As New Collection
Dim element As Variant
With CreateObject("Wscript.Shell")
For Each element In myLinkFilePaths
myColl.Add .CreateShortcut(element).TargetPath & "\"
Next element
End With
Set GetLinksTarget = myColl
End Function
Function GetLinksPaths(startPath As String) As Collection
Dim objFso As FileSystemObject '<~~ requires adding reference to `Microsoft Scripting Runtime` library
Dim objFile As File
Dim objFolder As Folder
Dim myColl As New Collection
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFso.GetFolder(startPath)
For Each objFile In objFolder.Files
If objFso.GetExtensionName(objFile.Path) = "lnk" Then myColl.Add objFile.Path
Next
Set GetLinksPaths = myColl
End Function
、あなたはDir()
機能と上に行きたいはずですその後、同じようにGetLinksPaths()
機能を変更します。私は、次のコードを提案する上で何のためMicrosoft Scripting Runtime
ライブラリ
への参照を追加するだけ犠牲にして、この以下:
Function GetLinksPaths(startPath As String) As Collection
Dim tempPath As String
Dim myColl As New Collection
tempPath = Dir(startPath & "*.lnk")
Do Until tempPath = vbNullString
myColl.Add startPath & tempPath
tempPath = Dir()
Loop
Set GetLinksPaths = myColl
End Function
をBTW:CreateObject("Wscript.Shell").CreateShortcut(Lnk)
メソッド戻り、オブジェクト(のいずれかWshShortcut
又はWshURLShortcut
1)SUありませんGetlnkpath()
の機能と同じようにClose()
メソッドを実行してください。したがって、それを削除して、必要なものを削除してください。
ショートカットをコレクションに「翻訳」せずに追加してから、コレクションをループして適切なパスに「翻訳」することもできます。しかし、私はまだこの現象の原因を理解したいと思うでしょう。 – johankr
あなたはスタートパスのドライブ位置を共有してください –
これはネットワークドライブを介して検索しているより大きなプログラムの一部なので、開始パスはさまざまですが、 "J:\ Folder \ Folder \ Folder \"タイプです – johankr