Обобщение пользовательской среды - PullRequest
1 голос
/ 16 мая 2019

Мне нужно обновить код, чтобы файлы могли быть расположены независимо от того, в какой папке они находятся.

У меня есть нужные мне файлы из определенной папки с именем DB Templates, но мне нужно настроить свой код так, чтобыэти файлы могут использоваться независимо от того, находится ли эта папка на рабочем столе или в документах и ​​т. д.

Мой текущий код:

Environ("USERPROFILE") & "\Desktop\DBTemplates\matrix.csv"

1 Ответ

2 голосов
/ 16 мая 2019

Простой и быстрый способ

Вы можете использовать Function, как это, чтобы проверить, существует ли файл:

Function FileExists(FilePath As String) As Boolean
    Dim TestStr As String
    TestStr = ""
    On Error Resume Next
    TestStr = Dir(FilePath)
    On Error GoTo 0
    If TestStr = "" Then
        FileExists = False
    Else
        FileExists = True
    End If
End Function

И в этот момент вы можете просто попытаться загрузить файл, как в этом примере:

desktopPath = Environ("USERPROFILE") & "\Desktop\DBTemplates\matrix.csv"
documentsPath = Environ("USERPROFILE") & "\Documents\DBTemplates\matrix.csv"

if FileExists(desktopPath) then loadFile(desktopPath)
if FileExists(documentsPath) then loadFile(documentsPath)
'Add any other Path you want to check...

Альтернативный путь

Используя этот метод, вы можете найти свой файл и затем загрузить его.

Sub FindMyFile()
    Debug.Print Search(Environ("USERPROFILE"), "matrix.csv")
End Sub

Function Search(sPath As String, fileToFind As String) As String

    Dim FSO As New FileSystemObject
    Dim myFolder As Folder
    Dim mySubFolder As Folder
    Dim myFile As File

    Set myFolder = FSO.GetFolder(sPath)

    For Each mySubFolder In myFolder.SubFolders
        On Error Resume Next
        For Each myFile In mySubFolder.Files
            If myFile.Name = fileToFind Then
                Debug.Print myFile.Name & " in " & myFile.Path 'Or do whatever you want with the file
                Exit For
            End If
        Next
        Search = Search(mySubFolder.Path, fileToFind)
    Next

End Function

Примечание : обратите внимание, что этот метод может занять очень много времени для поиска вашего файла. Используйте это, только если нет альтернатив или выберите корневой каталог, в котором не много папок / файлов.

Надеюсь, это поможет.

...