Страницы: 1
RSS
Появляются лишние символы в пути к файлу при поиске файла с последней датой в файле
 
Добрый день. Есть код, который проверяет названия файлов в папке (название файла "файл 02.02.2019.xlsb", "файл 04.04.2019.xlsb" и т.д.) и открывает файл с последней датой. После срабатывания функции, переменной назначается путь к файлу, но после последнего слэша появляются знаки "-$" и макрос не может открыть файл. То есть, путь к файлу выглядит как "C:\путь\-$файл 04.04.2019.xlsb". Раньше макрос открывал файл и не было такой проблемы. Подскажите, в чем может быть проблема?
Код
Sub poisk_file_perviy_svezest()
Dim wb As Workbook

СамыйСвежийФайл$ = LastFile$("С:\путь\", ".xlsb")
Set wb = Workbooks.Open(СамыйСвежийФайл$)
_________________________________________________________________________________________________
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 - 04.10.2019 11:06:03
 
Цитата
Hellmaster написал:
после последнего слэша появляются знаки "-$" и макрос не может открыть файл
потому что этот знак означает временный заблокированный файл(скрытый). Это временная копия открытого в текущий момент файла. Такие вообще надо пропускать, ибо открыть и не получится в любом случае и смысла в этом нет.
Как вариант вместо этой строки
If fil.Name Like "*" & Mask Then FileNamesColl.Add fil.Path
записать такую:
Код
If fil.Name Like "*" & Mask Then 
    if fil.Attributes <> 2 then
        FileNamesColl.Add fil.Path
    end if
end if
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, а можно открыть файл только для чтения или не открывая файл, скопировать из него данные? Есть ли вообще какой-то способ вытащить информацию из такого файла?
Изменено: Hellmaster - 04.10.2019 11:22:17
 
Цитата
Hellmaster написал:
открыть файл только для чтения
у Workbooks.Open есть соответствующий параметр - загляните в справке, там про это написано:
Код
application.Workbooks.Open(filename:=fname,readonly:=true)
а про "не открывая" - технически это вообще невозможно сделать, т.к. нельзя даже считать данные, не открыв файл хоть как-то. И если уж речь про работу из Excel, то лучше открыть в скрытом режиме и потом считывать. Но можно и другими методами(но с ограничениями). Впрочем, все это я уже описывал здесь: Как получить данные из закрытой книги?

Цитата
Hellmaster написал:
Есть ли вообще какой-то способ вытащить информацию из такого файла?
из такого - это какого?
Изменено: Дмитрий(The_Prist) Щербаков - 04.10.2019 11:25:57
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал: из такого - это какого?
Из
Цитата
временный заблокированный файл(скрытый)
 
Еще раз читаем. ВНИМАТЕЛЬНО:
Цитата
Дмитрий(The_Prist) Щербаков написал:
Такие вообще надо пропускать, ибо открыть и не получится в любом случае и смысла в этом нет.
это временный заблокированный файл. Считай системный. Это не файл Excel, у него вообще особый свой формат в бинарном виде. Нет, можно теоретически считать, но для этого надо очень хорошо владеть информацией о том, как туда Excel записывает информацию, в каком виде и какую именно. Я вот, например, этого не знаю.
Изменено: Дмитрий(The_Prist) Щербаков - 04.10.2019 11:30:24
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, попробую способы из ссылки и покопаюсь с кодом. Спасибо за советы!
 
Дмитрий(The_Prist) Щербаков, дело в том, что руками я могу открыть файл только для чтения, так же, могу скопировать его на рабочий стол и открыть без подобных проблем
 
Цитата
Hellmaster написал:
руками я могу открыть файл только для чтения
Ну здесь я тогда ничего не могу подсказать, не видя самого файла. У меня такие файлы не открываются. А если Вы можете его открыть руками и видите всю нужную информацию - в чем проблема-то вообще? Открыли на чтение, прочитали что нужно и все. Или сохранили в другой файл и сделали с копией что душе угодно...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, просто есть еженедельная задача, которую мне руками делать лень. Пытаюсь написать макрос для коллег, но с сохранением файла в другую папку возникнут некоторые сложности, т.к. в общих папках желательно не добавлять папки, а рабочий стол у всех по разным ссылкам находится) А вот с открытием только для чтения что-то не выходит. Выдает ту же ошибку, что и без readonly:=true.
Еще раз спасибо, буду пытаться дальше)
 
Цитата
Hellmaster написал:
есть еженедельная задача, которую мне руками делать лень. Пытаюсь написать макрос для коллег,
Лень Вам, а пишете для коллег ))
 
Цитата
Hellmaster написал:
Выдает ту же ошибку, что и без readonly:=true
что за ошибка-то хоть?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Юрий М написал:
Лень Вам, а пишете для коллег ))
Мне коллеги присылают на почту файл и просят подтянуть данные и посчитать. Так что делаю это я) Чтобы я этого не делал, пишу макрос для них, чтобы меня не беспокоили больше)
Цитата
Дмитрий(The_Prist) Щербаков написал:
что за ошибка-то хоть?
Вот сейчас еще раз макрос запустил и он открыл файл только для чтения. До этого была ошибка "невозможно открыть файл "путь к файлу\-$файл" и окно с Debug
Страницы: 1
Наверх