Здравствуйте, уважаемые эксперты! Понимаю, что вопросов о сохранения книги с помощью макроса великое множество, но найти именно то, с чем у меня проблема - не получилось. Поэтому надеюсь на вашу помощь. Собственно вот макрос, который я составил:
Код
Sub Сохранение()
Папка = "D:\" & Range("A1")
Подпапка = Range("A2")
Путь = Папка & "\" & Подпапка
Название = Range("A3")
ИмяФайла = Путь & "\" & Название
If Dir(Папка, vbDirectory) = "" Then
MkDir (Папка)
ChDir (Папка)
Else: ChDir (Папка)
End If
If Dir(Путь, vbDirectory) = "" Then
MkDir (Путь)
ChDir (Путь)
Else: ChDir (Путь)
End If
ActiveWorkbook.SaveAs (ИмяФайла)
End Sub
Меня почти полностью устраивает, как он работает, если бы не одно но: Когда я сохраняю файл под уже существующем именем, то Excel меня вполне справедливо спрашивает, хочу ли я перезаписать файл. Если я отвечаю "НЕТ", то появляется ошибка:
Мне бы хотелось, чтобы если я ответил "НЕТ", то ошибка бы не вылезала.
Можно в принципе написать вначале On erroe resume next, но что-то мне подсказывает, что это не лучший вариант. Может есть способ предотвратить именно эту ошибку? Или как-то завершить макрос при ответе "НЕТ"?
Сделайте проверку на существование идентичной книги и если такова уже есть, то выводите сообщение, а уже исходя из ответа на Ваше сообщение, программа должна совершить сохранение либо закончить свое выполнение.
"Все гениальное просто, а все простое гениально!!!"
чтобы не возникало ошибки нужно знать что делать с файлами: 1. с тем что УЖЕ ЕСТЬ с этим именем? 2. с тем, что Вы решили сохранить с уже существующим именем?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Valo, Вам задан простой вопрос: Что делать? забудьте о программировании, макросох, о способе определения, что такой уже есть, простыми словами ЧТО делать в этой ситуации
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Попробуйте так , не проверял, но смысл должен быть понятен.
Код
Sub Сохранение()
Dim fname$
Application.DisplayAlerts = False
Папка = "D:\" & Range("A1")
Подпапка = Range("A2")
Путь = Папка & "\" & Подпапка
Название = Range("A3")
ИмяФайла = Путь & "\" & Название
If Dir(Папка, vbDirectory) = "" Then
MkDir (Папка)
ChDir (Папка)
Else: ChDir (Папка)
End If
If Dir(Путь, vbDirectory) = "" Then
MkDir (Путь)
ChDir (Путь)
Else: ChDir (Путь)
End If
fname = Dir(ИмяФайла & "*.xls*")
If fname <> "" Then
If MsgBox("Файл существует." & vbNewLine & "Хотите заменить?", vbYesNo) = vbNo Then Application.DisplayAlerts = True: Exit Sub
End If
ActiveWorkbook.SaveAs (ИмяФайла)
Application.DisplayAlerts = True
End Sub
Nordheim, огромное спасибо! Смысл я понял. Отключаем DisplayAlerts, чтобы проверить наличие файла именно с помощью VBA. Только зачем переменная fname, если и без нее работает?
Код
Sub Сохранение()
Application.DisplayAlerts = False
Папка = "D:\" & Range("A1")
Подпапка = Range("A2")
Путь = Папка & "\" & Подпапка
Название = Range("A3")
ИмяФайла = Путь & "\" & Название
If Dir(Папка, vbDirectory) = "" Then
MkDir (Папка)
ChDir (Папка)
Else: ChDir (Папка)
End If
If Dir(Путь, vbDirectory) = "" Then
MkDir (Путь)
ChDir (Путь)
Else: ChDir (Путь)
End If
If ИмяФайла <> "" Then
If MsgBox("Файл существует." & vbNewLine & "Хотите заменить?", vbYesNo) = vbNo Then Application.DisplayAlerts = True: Exit Sub
End If
ActiveWorkbook.SaveAs (ИмяФайла)
Application.DisplayAlerts = True
End Sub
ИмяФайла - это всегда есть и обработчик If ... Then не нужен, а в переменную fname записывается уже существующий файл, поэтому в Вашем случае всегда будет сообщение, в моем только при наличии такого же файла. Как то так.
"Все гениальное просто, а все простое гениально!!!"