Страницы: 1
RSS
Method 'Saveas' of object '_workbook' failed
 
Добрый день! Есть файл xls2txt с макросом, экспортирующий другой файл xls в текст:

Код
Sub Макрос1()
'
' Макрос1 Макрос
    Workbooks.Open Filename:="C:\nnCron\thebat!\1.xls"
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:="C:\nncron\thebat!\1.txt", FileFormat:= _
        xlUnicodeText, CreateBackup:=False
    ActiveWorkbook.Save
    Application.DisplayAlerts = True
    ActiveWindow.Close False
    Windows("xls2txt.xls").Activate
    Application.Quit
End Sub


при попытке выполнить который выдается это сообщение: Run-time error '1004': Method 'Saveas' of object '_workbook' failed

Debug переходит на строку
Код
     ActiveWorkbook.SaveAs Filename:="C:\nncron\thebat!\1.txt", FileFormat:= _
        xlUnicodeText, CreateBackup:=False
Суть проблемы в том, если файл 1.xls не запаролен, он отрабатывает успешно, без ошибок. Но когда я пытаюсь запустить файл, имеющий запароленный макрос, вываливается эта ошибка. При этом, если сохранять вручную, никаких проблем не возникает. Проблемный файл 1.xls прилагаю.
Изменено: xseed - 05.08.2016 18:07:23
 
Тут все просто. Вы пытаетесь сохранить файл, который уже открыт под тем же именем самим Excel. Поэтому VBA и генерирует ошибку - файл занят процессом и не может быть перезаписан. Это недопустимо. Сохраняйте либо в другую папку, либо под другими именем.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
The_Prist написал:
Вы пытаетесь сохранить файл, который уже открыт под тем же именем
Я открываю файл xls2txt.xls. Выполняю в нем макрос1. Открывается файл 1.xls, сохраняется как 1.txt. Где тут сохранение под тем же именем? Имя то же. но расширение txt. причем, когда я делал запись макроса, excel спрашивал меня. что файл 1.txt уже существует. заменить? Я согласился, нажав Да.
Изменено: xseed - 05.08.2016 17:59:30 (ошибка)
 
Да, проглядел расширение. Сказывается, видимо, пятница :)
Но тем не менее. Файл такой есть и Excel делает запрос на его замену. И незаметно для Вас сначала его удаляет, а потом записывает новый. VBA этого за Вас делать не будет. И ошибка в VBA у Вас явно так же говорит о том, что файл такой уже есть. Поэтому сначала убедитесь, что такого файла нет на диске. Если есть - удаляйте:
Код
If dir("C:\nncron\thebat!\1.txt",16) <> "" then
kill "C:\nncron\thebat!\1.txt" 'удаляем файл, если он есть
end if
ActiveWorkbook.SaveAs Filename:="C:\nncron\thebat!\1.txt", FileFormat:=xlUnicodeText, CreateBackup:=False
P.S. Оформляйте код соответствующим тегом(<...>), а не шрифтом. Так нагляднее будет.
Изменено: The_Prist - 05.08.2016 18:02:36
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, нет, файл 1.txt тут ни причем. Если вы выполните мой макрос с обычным xls файлом, никаких ошибок не возникнет, файл сохранится как txt, даже если он существует. Проблема возникнет, только если выполнить макрос с прикрепленным файлом 1.xls (причем его надо поместить в каталог C:\nnCron\thebat!)

PS: прикрепил файл с макросом xls2txt.xls
Изменено: xseed - 05.08.2016 18:12:04
 
Пароль к проекту какой? Может там еще какое событие срабатывает.
Изменено: The_Prist - 05.08.2016 18:17:59
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Это не мой файл, пароля не знаю.
Может быть, потому, что в 1.xls установлен VBAProject Password, макрос в файле xls2txt не отрабатывает?
Тогда экспорт вручную в txt на этом файле 1.xls почему тогда работает?
Изменено: xseed - 05.08.2016 18:29:52
 
А можно тогда, если уж макрос не получается выполнить на запаролленом файле, не выполнять его вообще? То есть, можно ли предварительно перед выполнением макроса проверить файл на защиту и если она установлена - не выполнять макрос? Как это сделать?
Изменено: xseed - 05.08.2016 18:33:47
 
Тогда сделайте так:
Код
Sub Макрос1()
'
' Макрос1 Макрос
'

'
    Workbooks.Open Filename:="C:\nnCron\thebat!\1.xls"
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    ActiveWorkbook.Sheets(1).Copy
    ActiveWorkbook.SaveAs Filename:="C:\nncron\thebat!\1.txt", FileFormat:= _
        xlUnicodeText, CreateBackup:=False
    ActiveWorkbook.Save
    Application.DisplayAlerts = True
    ActiveWindow.Close False
    Windows("xls2txt.xls").Activate
    Application.Quit
End Sub
больше одного листа все равно не сохраните в txt
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
The_Prist написал:
ActiveWorkbook.Sheets(1).Copy
Спасибо!
А как работает эта команда? Просто копирует лист или же копирует книгу? Тогда в чем причина проблемы?
Изменено: xseed - 05.08.2016 18:40:53
 
Эта команда копирует один(в данном случае первый) лист в новую книгу. Книга создается автоматически.
В чем проблема? В том, что есть пароль на проект. А файл Вы кодом сохраняете без этого самого проекта. И т.к. там есть пароль на проект VBA - то доступа к проекту извне нет для его модификации. А удаление - та еще модификация. Т.е. по факту Вы не можете сохранить данный файл в любом формате, который не поддерживает хранение VBA проекта. А при копировании листа создается новая книга с одним лишь листом и без всяких проектов и защиты.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх