Страницы: 1
RSS
Выбор рандомного файла кнопкой с последующим поиском в нём
 
Для ускорения составления основного рабочего файла (для примера в архиве он называется "Файл поиска") требуется помощь в решении вопроса замены исходного файла (Файлы списков сотрудников за дату).

Задача такая: есть кнопка. При ее нажатии должно появиться окно выбора файла для последующего поиска в нем. Файлы присылают по почте несколько раз в неделю. Это не статические данные. Приходится их постоянно выуживать.
Расположение файлов всегда в одной папке. Если есть возможность - было бы замечательно сразу ее указать, чтобы не выбирать каждый раз.
После выбора файла в Файле поиска напротив должности должно появиться кто сегодня работает: должность и код.

Надеюсь все подробно объяснил.
Желательно без участия макросов (если это вообще возможно)
 
Цитата
написал:
Выбор рандомного файла
точно рандомного или все же нужно взять каждый файл открыть и из него подставить данные? или может по дате в названии файла или иной признак
Изменено: Mershik - 19.11.2021 09:16:17
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
написал:
Желательно без участия макросов
Если это требование не критично, то вот.
Код
Option Explicit

Const Const_InitialFileName = "C:\tmp\Поиск в выбранном файле\Сотрудники"

Sub Кнопка1_Щелчок()
    Dim aFile As Variant
    aFile = ShowFileDialog()
    If Not IsEmpty(aFile) Then
        GetFromFile aFile(LBound(aFile))
    End If
End Sub

Sub GetFromFile(ByVal sFile As String)
    Dim wb As Workbook
    Set wb = Workbooks.Open(sFile, False, True)
    
    With ThisWorkbook.Sheets(1)
        With .Range("D5:E9")
            .FormulaLocal = "=ВПР($C:$C;'[" & wb.Name & "]Лист1'!$B:$D;СТОЛБЕЦ()-2;0)"
            .Calculate
            Dim arr As Variant
            arr = .Cells
            .Cells = arr
            Erase arr
        End With
    End With
    wb.Close False
End Sub

Function ShowFileDialog() As Variant
    Dim oFD As FileDialog
    Dim x As Variant
    Dim lf As Long
    'назначаем переменной ссылку на экземпляр диалога
    Set oFD = Application.FileDialog(msoFileDialogFilePicker)
    With oFD 'используем короткое обращение к объекту
    'так же можно без oFD
    'With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = False
        .Title = "Выбрать файлы отчетов" 'заголовок окна диалога
        .Filters.Clear 'очищаем установленные ранее типы файлов
        .Filters.Add "Excel files", "*.xls*;*.xla*", 1 'устанавливаем возможность выбора только файлов Excel
        '.Filters.Add "Text files", "*.txt", 2 'добавляем возможность выбора текстовых файлов
        .FilterIndex = 1 'устанавливаем тип файлов по умолчанию - Text files(Текстовые файлы)
        .InitialFileName = Const_InitialFileName 'назначаем папку отображения и имя файла по умолчанию
        .InitialView = msoFileDialogViewDetails 'вид диалогового окна(доступно 9 вариантов)
        If oFD.Show = 0 Then Exit Function 'показывает диалог
        'цикл по коллекции выбранных в диалоге файлов
        ReDim x(1 To .SelectedItems.Count)
        For lf = 1 To .SelectedItems.Count
            x(lf) = .SelectedItems(lf) 'считываем полный путь к файлу
        Next
    End With
    ShowFileDialog = x
End Function
 
Цитата
точно рандомного или все же нужно взять каждый файл открыть и из него подставить данные? или может по дате в названии файла или иной признак
Добрый вечер.
Нет, не из каждого. А каждый раз новые данные. СУммировать их не надо. Нужно брать актуальные данные из файла соответствующей дате. Автоматически нет необходимости это делать, достаточно  в ручном режиме.

Цитата
Если это требование не критично, то вот.
Я то с макросами на Вы, даже не понимаю как воспользоваться вашим скриптом. Поэтому то это и было желательно.
Но спасибо за время, которое уделили моему вопросу.
 
Цитата
написал:
Я то с макросами на Вы
Там не сложно.
Как вставить готовый макрос в рабочую книгу (office-guru.ru)
 
Да не в этом дело. Я для примера сделал файлы,  а теперь мне их надо применить к своему рабочему файлу. Для этого нужно разобраться как этот макрос работает. А вот с этим и сложности

Цитата
написал:
       With .Range("D5:E9")            .FormulaLocal = "=ВПР($C:$C;'[" & wb.Name & "]Лист1'!$B:$D;СТОЛБЕЦ()-2;0)"
Я так понимаю, что основные параметры мне необходимо изменить в этих строках.
Если с   With .Range все ясно. То с формулой - беда. Можете вкратце рассказать что и как?
 
Вопрос закрыт.
Решил по-другому.
Всем спасибо за помощь.
Страницы: 1
Наверх