Использование средства выбора папок VBA и для каждого оператора - PullRequest
0 голосов
/ 01 июня 2018

В настоящее время я пытаюсь найти решение, которое позволит пользователю определить папку на своем компьютере, где хранятся определенные файлы (с помощью инструмента выбора папок).

После установки этой папки яЯ хочу найти там файл с таким именем, как «Файл 1».Обратите внимание, у меня нет полного имени файла, оно будет меняться от человека к человеку.Например, полное имя может быть «123456 File1 abcde.xlsx»

Текущая попытка выглядит следующим образом (это привело к ошибке)

Sub SelectFolder()

    Dim wb As Workbook
    Dim sFolder As String
    ' Open the select folder prompt
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = -1 Then    ' if OK is pressed

        End If
    End With

    If sFolder <> "" Then    ' if a file was chosen
        For Each wb In sFolder
            If wb.Name Like ("Extract 1 Dividends") Then
                wb.Open
            End If
        Next wb

    End Sub

Это приводит к ошибке, как только пользователь выбираети установить строку sFolder, я не могу искать в этой строке файл, который я не хочу.Я получаю следующую ошибку

. Для каждого можно перебирать только объект коллекции или массив

Есть ли альтернативная стратегия, которую я могу попробовать?

1 Ответ

0 голосов
/ 01 июня 2018

Ошибка довольно объяснительная - вы просите VBA зациклить каждую рабочую книгу строки.Единственное, что является «зацикленным» в строке, это ее символы.Таким образом, VBA не подозревает, что String на самом деле является папкой на вашем ПК, содержащей рабочие книги.

Это способ перебрать файлы Excel в заданной папке:

Option Explicit

Sub SelectFolder()

    Dim wb As Workbook
    Dim fileInFolder As String        

    fileInFolder = Dir("C:\Users\user\Desktop\Neuer Ordner\")

    Do While Len(fileInFolder) > 0
        If Right(fileInFolder, 4) = "xlsx" Then
            Debug.Print fileInFolder
        End If
        fileInFolder = Dir
    Loop

End Sub

Используется тот факт, что ваши файлы Excel, вероятно, имеют расширение xlsx, таким образом, он проверяетпоследние 4 буквы имени файла.


Поскольку вы пытаетесь открыть книги и что-то с ними сделать, это хорошее руководство, как это сделать:

Option Explicit

Sub SelectFolder()

    Dim wb As Workbook
    Dim fileInFolder As String
    Dim initialDir As String

    initialDir = "C:\Users\user\Desktop\Neuer Ordner\"
    fileInFolder = Dir(initialDir)

    Do While Len(fileInFolder) > 0
        If Right(fileInFolder, 4) = "xlsx" Then
            Set wb = Workbooks.Open(initialDir & fileInFolder)
            Debug.Print wb.Name
            Debug.Print wb.Path
        End If
        fileInFolder = Dir
    Loop

    For Each wb In Workbooks
        If wb.Name <> ThisWorkbook.Name Then
            Debug.Print wb.Name & " is closed!"
            wb.Close savechanges:=True
        End If
    Next wb

End Sub

В конце кода он просматривает все рабочие книги, открывается в одном и том же экземпляре и закрывает все из них, кроме рабочей книги, в которой находится код (If wb.Name <> ThisWorkbook.Name Then).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...