Страницы: 1
RSS
На файле не работает метод Workbook.Open
 
Друзья!
Всем привет! Очень нужна Ваша помощь.

Подскажите пожалуйста, использую макрос для открытия книги (ниже)
Срабатывает практически на всех файлах, но есть несколько книг на которых он просто отказывается работать. Файл "Книга" приложил.
Вроде бы обычные книги, в чем причина не знаю. Книг такого типа очень много, пересоздавать их очень трудоемко.

Заранее большое спасибо за помощь!
Код
Sub Сбор()Dim NewFiles
Dim wbActNew As WorkbookNewFiles = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", , "Выберите файл", , False)
If VarType(NewFiles) = vbBoolean Then Exit Sub
Set wbActNew = Workbooks.Open(Filename:=NewFiles)End Sub

 
Не совсем понятно где именно не работает. Для каждой книги у Вас прописано событие Workbook_Open? И только в некоторых он не срабатывает? Или при попытке открыть книгу через Open возникает ошибка? Или просто не открывается? Или как происходит?
Изменено: The_Prist - 24.08.2017 11:37:56
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Покажите файл, который не открывается. Может у него просто скрыто рабочее окно?
 
Цитата
_Maxim_ написал:
Файл "Книга" приложил.
К какому месту?
Я сам - дурнее всякого примера! ...
 
Друзья, спасибо большое за отклик.
Сейчас пытаюсь выложить книгу, она пока больше 100 кб получается.
Проблема с листами, честно говоря первый раз с таким столкнулся. Всего три листа в книге, два из них удаляю, файл открывается. Ели не удалить, опять ошибка.
На листах вроде бы ничего такого, числа, форматы.
Изменено: _Maxim_ - 24.08.2017 11:45:21
 
Цитата
_Maxim_ написал:
опять ошибка
и что говорит ошибка?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
И еще. На форуме считается дурным тоном писать через строку, так что исправьте топик, пока модеры это безобразие не увидели :(
Я сам - дурнее всякого примера! ...
 
Поправил, текст через строку)
Ошибка вот такого рода:
Книгу пытаюсь приложить , но получается 230 кб
Изменено: _Maxim_ - 24.08.2017 11:48:27
 
У меня работает. Может открываемый файл запорчен? На пароле?
Изменено: kuklp - 24.08.2017 11:57:39
Я сам - дурнее всякого примера! ...
 
Где-то читал, что метод .GetOpenFilename работает не стабильно (причина не указана).
Используйте Application.FileDialog(msoFileDialogOpen):
Код
With Application.FileDialog(msoFileDialogOpen)
    .Show
    If .SelectedItems.Count = 0 Then Exit Sub Else Workbooks.Open (.SelectedItems(1))
End With

Изменено: SAS888 - 24.08.2017 12:04:02
Чем шире угол зрения, тем он тупее.
 
Пароля точно нет, и вроде не запорчен.
как-нибудь можно тут выложить файл 230 кб?
 
Цитата
SAS888 написал:
.GetOpenFilename работает не стабильно
Но в таком случае можно увидеть, что в переменной NewFiles перед открытием.
Я сам - дурнее всякого примера! ...
 
Цитата
kuklp написал:
Но в таком случае можно увидеть, что в переменной NewFiles перед открытием.
Можно.. И нужно..
Изменено: SAS888 - 24.08.2017 12:11:19
Чем шире угол зрения, тем он тупее.
 
К сожалению, такая же ошибка.
Без книги тут наверно никак не помочь.
 
Цитата
SAS888 написал:
NewFiles - это объект.
С какой радости, тезка?
Я сам - дурнее всякого примера! ...
 
_Maxim_, что в переменной NewFiles?
Я сам - дурнее всякого примера! ...
 
Цитата
kuklp написал:
С какой радости, тезка?
Пардон... Перепутал с GetObject.
Но, проблема у автора не с этим. Тем более, что
Цитата
_Maxim_ написал:
Всего три листа в книге, два из них удаляю, файл открывается. Ели не удалить, опять ошибка.
"Вслепую" сложно что-то советовать.
Чем шире угол зрения, тем он тупее.
 
Да действительно в слепую, не решить проблему.
Но никак не могу сделать 100 кб, удаляя листы файл открывается. А так книга 215 кб весит.
В переменной следущее:
 
Если открывать файл вручную - не появляется ли сообщение, что в книге какое-то содержимое не удалось прочитать, расширение файла отличается от его типа и т.п.?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Попробуйте задать переменной по выбору файла тип String
Изменено: Dmitriy XM - 24.08.2017 12:58:43
 
The_Prist,  знаете я сначало сохранял книгу в формате .xlsm, так как там выполнял макрос по работе с ячейками (возможно он как то повредил листы, хотя не уверен) .И тогда возникало сообщение об ошибки, что восстановите содержимое и т.д. позднее все пересохранил в.xlsb  и сообщение пропало.

Dmitriy XM, подскажите пожалуйста, это как прописать?
 
Смотрите сообщение №22
 
Цитата
Dmitriy XM написал:
задать переменной по выбору файла тип String
Может сначала Вы попробуете? И нажмите "Отмена" в диалоге. Чем все закончится?
Я сам - дурнее всякого примера! ...
 
Так попробуйте:
Код
Application.DisplayAlerts = False
Workbooks.Open Filename:=NewFiles , CorruptLoad:=xlRepairFile
Application.DisplayAlerts = True
Желательно перед тем как пробовать, сделать резервную копию открываемого файла (а то мало ли чего он там "навосстанавливает").
Изменено: Equio - 24.08.2017 18:23:56
 
Equio, Спасибо Вам огромное!!
Это единственный способ который сработал!
Правда в книге потом пишет [восстановленный] . Это что то с книгой было не то ?

Еще хотел уточнить , может быть знаете данная надпись всегда будет возникать?
 
Цитата
_Maxim_ написал:
Это единственный способ который сработал!
только Вы аккуратнее с этим методом. Потому как это открытие с попыткой восстановления данных книги. И при этом могут быть удалены формулы, форматы, связи, подключения, что может привести к потере данных.
Надпись будет возникать всегда для файлов, открыть которые без попытки восстановления не удалось.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Да, с книгой что-то "не то". Посмотрите, все ли данные на месте после того, как книга открылась в таком режиме (особенно на тех листах, при удалении которых книга открывалась без проблем).

Чтобы надпись всё время не возникала, попробуйте такой код. Идея состоит в том, чтобы сначала попробовать открыть книгу в нормальном режиме, а если это не получится, то открывать в режиме восстановления. По идее, надпись будет возникать только при открытии "проблемных" книг.
Код
Set wbActNew = Nothing
On error resume next
Set wbActNew = Workbooks.Open(Filename:=NewFiles)
On error goto 0
if (wbActNew is Nothing) then
    Application.DisplayAlerts = False
    Set wbActNew = Workbooks.Open(Filename:=NewFiles , CorruptLoad:=xlRepairFile)
    Application.DisplayAlerts = True
end if 
Изменено: Equio - 24.08.2017 19:14:19
Страницы: 1
Читают тему
Наверх