Страницы: 1
RSS
Задать переменную с частью названия файла
 
Добрый день. Мне нужно задать переменную, не имея полного названия файла. Допустим, файл называется "Stock_Report_04.09.2019", находится в папке "С:\". В макросе я выявляю самый поздний файл в папке и дальше мне нужно задать переменную для файла. Как мне задать переменную последней строки открывшегося файла?
Код
Sub poisk_file_perviy_svezest()
Dim lr As Long
Dim lr2 As Long

СамыйСвежийФайл$ = LastFile$("C:\", ".xlsb")
    Workbooks.Open СамыйСвежийФайл$
lr = Workbooks("stock_report*.xlsb").Worksheets("Лист1").Cells(Rows.Count, 1).End(xlUp).Row
lr2 = Workbooks("Книга2.xlsx").Worksheets("Лист1").Cells(Rows.Count, 1).End(xlUp).Row

___________________________________________________________________________________________________________
Function LastFile$(ByVal FolderPath As String, Optional ByVal Mask As String = "", _
                   Optional ByVal SearchDeep As Long = 999)
   
    Dim FilenamesCollection As New Collection
    Set FSO = CreateObject("Scripting.FileSystemObject")
    GetAllFileNamesUsingFSO FolderPath, Mask, FSO, FilenamesCollection, SearchDeep
    Set FSO = Nothing: Application.StatusBar = False
    Dim maxFileDate As Double
    For Each file In FilenamesCollection
        currFileDate = FileDateTime(file)
        If currFileDate > maxFileDate Then LastFile$ = file: maxFileDate = currFileDate
    Next file
End Function
___________________________________________________________________________________________________________ 
Function GetAllFileNamesUsingFSO(ByVal FolderPath As String, ByVal Mask As String, ByRef FSO, _
                                 ByRef FileNamesColl As Collection, ByVal SearchDeep As Long)
    On Error Resume Next: Set curfold = FSO.GetFolder(FolderPath)
    If Not curfold Is Nothing Then
        Application.StatusBar = "поиск в папке: " & FolderPath
 
        For Each fil In curfold.Files
            If fil.Name Like "*" & Mask Then FileNamesColl.Add fil.Path
        Next
        SearchDeep = SearchDeep - 1
        If SearchDeep Then
            For Each sfol In curfold.SubFolders
                GetAllFileNamesUsingFSO sfol.Path, Mask, FSO, FileNamesColl, SearchDeep
            Next
        End If
        Set fil = Nothing: Set curfold = Nothing
    End If
End Function
Изменено: Hellmaster - 05.09.2019 13:09:19
 
Что то как то сумбурно описание. Если определили самый поздний файл, в чем проблема передать этот файл в переменную? Это ваш код, или откуда взят?
"Все гениальное просто, а все простое гениально!!!"
 
Код
v = Workbooks("stock_report*.xlsb").Worksheets("Лист1").Cells(Rows.Count, 1).End(xlUp).Value
 
Цитата
Hellmaster написал:
Как мне задать переменную последней строки открывшегося файла?
- вот это можно как-то пояснить что конкретно означает?
 
Nordheim, функции взяты и немного переделаны. Сам саб мой.
Hugo, конкретно вот эта строка интересует. как правильно ее записать?
lr = Workbooks("stock_report*.xlsb").Worksheets("Лист1").Cells(Rows.Count, 1).End(xlUp).Row
при том, что stock_report я нашел с помощью функций.
RAN, эта строка есть у меня в коде. Она не работает. Пишет "out of range"
Изменено: Hellmaster - 05.09.2019 13:14:11
 
Цитата
Hellmaster написал:
строка есть у меня в коде. Она не работает.
Вот что значит, спросить так, чтобы никто ничего не понял.   :cry:
Я-то думал, что у вас она работает.
Код
Dim wb as Workbook
Set wb = Workbooks.Open СамыйСвежийФайл$
lr =wb.Worksheets("Лист1").Cells(Rows.Count, 1).End(xlUp).Row
 
RAN, постарался объяснить понятно). На строку
Код
Set wb = Workbooks.Open СамыйСвежийФайл$
пишет Expected: end of statement
 
Код
Set wb = Workbooks.Open(СамыйСвежийФайл$)
 
RAN, спасибо огромное. Все работает.
 
Как частный случай может быть ошибка при обращении к значению Rows.count - чьё именно количество нужно брать тоже следует указывать, пока в ходу есть разные виды файлов!
И это может быть не ошибка кода, а ошибочные результаты работы, что важно!
Страницы: 1
Наверх