Всем привет. Столкнулся с непонятной проблемой. В папке встречаются файлы с непонятным символом в имени. Ни Asc ни AscW не определяют его. Пишут 63 код По клику файл открывается нормально. А вот из макроса не получается. Изначально открывал стандартно и доставал значения
Код
fl = pt & Chr(92) & fl ' собираем полный путь
Set WBi = Workbooks.Open(fl) 'открываем книгу
но файл с такими символами не открываются. Вываливается ошибка С GetObject то же не получается Пытался перехватить ошибку и переименовав открыть копию и затем удалить - то же не получается Ни FeleCopy ни FSO не копируют. Последнее что пришло на ум: достать данные не открывая. Хотя бы формулой. Но и тут засада. Из таких файлов и формула не достаёт. Даже не пишется в ячейку. Кусок кода
Код
Do While Len(fl) > 0 'перебираем файлы в папке с активной книгой
On Error Resume Next ' Откладываем перехват ошибок.
If fl <> ActiveWorkbook.Name Then 'если не активный файл, то делаем
If Len(fl) > 0 Then ' если есть файл - работаем с ним
f2 = fl
Debug.Print f2
With Sho 'выбираем лист для сокращения записей в коде
lr = .Cells(.Rows.Count, 4).End(xlUp).Row + 1
.Cells(lr, 4).Formula = "='" & pt & "[" & f2 & "]" & "Чек-лист" & "'!" & "$C$7"
Debug.Print Len(.Cells(lr, 4).Formula), .Cells(lr, 4).Formula
Интересно. В проводнике этот символ не отображается, а в фаре - отображается. В фаре удалось переименовать. Может делать переименование через cmd? --- И архив скачался с таким именем:
У меня скачался в таком виде 8598ММБ_Галиева%E2%80%8EM01-CZ01-004_Чек-лист_МПР_Ур. 1.rar Разархивировался в 8598ММБ_Галиева#M01-CZ01-004_Чек-лист_МПР_Ур. 1.xlsx Поскольку у меня Excel 2003, то через конвертер файл открылся нормально
В имени архива символа нет. При распаковке появляется В таталкомандере переименовывать можно файлы перебираются по маске
Код
fl = Dir(pt & "\*.xls*") 'файл по маске *.xls* в папке с файлом
Но открываются не все. Те, которые не открываются не получается переименовать ни FileCopy ни FSO И формула не достаёт данные из закрытой книги. А из открытой дотаёт
Тут вопрос: а руками-то переименовывается средствами ОС? если нет - батник тоже не поможет. Есть предположение, что файл был создан в отличное от Windows ОС, что и породило проблему.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
У меня срабатывает как я предлагал (не мог на работе проверить):
Код
Sub tt()
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TheFolder = FSO.GetFolder("e:\tmp\Александр Моторин\") 'Каталог
Set TheFiles = TheFolder.Files
For Each AFile In TheFiles
If InStr(AFile, "xls") > 0 Then
'MsgBox AFile.Path
Set wb = Workbooks.Open(AFile.Path)
End If
Next
End Sub
Если посмотреть на Afile - то там есть этот ? в пути и имени, но это не мешает открыть файл.
RAN, Hugo не поверите, но я сам в шоке Я пробовал и копировать файл разными способами (в том числе и FSO) и открывал и через Open и через GetObject. Постоянно вылетала ошибка. Не знаю что стряслось (комп, правда перезагружал), но сейчас открывает. И AscW определяет 20 ? 63 8206 И нормально достаёт данные и ? не мешает! Чудеса в решете! По другому не скажешь. Единственное на что могу грешить: на Dir. Перебирал в одной папке, а теперь понадобилось и во вложенных и перешёл на FSO. Но ведь копировать FSO тогда тоже не хотела. И FileCopy не хотела И AscW не определяла писала 63 В любом случае всем спасибо за помощь