Войти

Показать полную графическую версию : Сохранение активной книги в exel


azbest
10-12-2007, 23:46
Здрасьте всем.
Сломал голову.
Нужно сохранить копию открытой книги с таким же названием, но к названию ещё прибавить и текущую дату со временем.
пробовал через ....SaveCopyAs....- пишет ошибка № 424 или 242 - не должно быть в имени двоеточия или точки запятой (это в формате даты) и не понимаю как применить Name или Names к ActiveWorkbook. Пишет недопустимое свойство для данного события или выражения- по памяти не помню. Есть у кого какие соображения?

ivank
11-12-2007, 00:36
azbest, может код, который ошибку выдаёт, покажете? Я честно говоря не очень понял, в чём проблема.

Alexej77
11-12-2007, 22:17
Попробуй так:

Public flg As Boolean

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveAsUI = True Or flg = True Then Exit Sub
a$ = Now
a$ = Replace(a$, ":", ".")
a$ = Replace(a$, " ", "_")
a$ = Replace(ThisWorkbook.FullName, ".xls", "") + "_" + a$ + ".xls"
flg = True
ActiveWorkbook.SaveAs a$
Cancel = True
flg = False
End Sub

azbest
11-12-2007, 23:54
Сам код программы на другом комп-е и в другом месте, номер ошибки сейчас не узнать,
но неважно.
Исходные условия:
Открытая рабочая книга (пусть даже пустая)
Задача:
Сохранить её копию, привязав эту копию ко времени её сохранения, то есть
сохраняем копию (с тем же именем прибавив к нему дату и время сохранения),
не закрывая рабочую книгу.
Всё.

Как я делал:
1) Сначала сохраняем новую книгу под нужным нам именем.(У новой книги имени ведь нет).
2) С помощью двух формул создаем "время и дату" в нужном нам формате.
3) Привязываем "время и дату" к имени файла через

Activeworkbook.SaveCopyAs filename="*********.xls"

В результате всего этого возникает файл, который - точная копия моей активной книги,
но без даты и времени, а звать его - False.

В качестве альтернативы пробовал присвоить имя активной рабочей книге
"чтоб не сохранять 10 раз одно и тоже",

по аналогии

Sheets("Лист1").Name= "Ё-маё"

Так с листом такое проходит а с книгой - сразу пишет:

"Ошибка компиляции. Невозможно присвоение значения свойству, доступному только для чтения."

не давая запуститься выполнению кода. Если его закоментировать, тогда всё выполняется но в результате появляется он - False.

Alexej77 - только сейчас увидел ваш совет, спасибо, попробую разобраться что к чему.

azbest
12-12-2007, 01:36
Кажется понял почти всё.
"Replace" - это удобно. Я у себя этого ещё не применял.
а flg как я понял - позволяет срабатывать всему этому делу только один раз,
в данной открытой книге.
Вот что за SaveAsUI - незнаю.
В связи с этим ещё вопрос - есть ли у Вас ссылка на литературу типа
"E-book" по VBA чтобы расписывалось каждое свойство, событие итд.
В подсказке VBA - когда подносишь курсор к нужному "слову" и жмешь
F1 - возникает текст на английском. Но не всегда его можно понять
правильно. Примеры тоже не всегда удачны для понимания.
В книгах что у меня дается описание "но не по всем операторам и их
возможным свойствам, событиям и тд"
Одним словом где можно прочитать
поконкретнее и поподробнее о VBA "по-русски"

Alexej77
12-12-2007, 20:56
Про flg - правильно думаешь.
SaveAsUI - если True, то пользователь пытается сохранить книгу через "Сохранить как...".
Ссылок и литературы нет. Только этот маленький хелп.

azbest
14-12-2007, 23:04
Похоже Replace в моем VBA ещё не присутствует. На свойства написано vba 1997-2000. А эта функция как я понял в vba 2002. Нашел нечто подобное из вашего "скомпилированного" файла - функция format. Ещё раз спасиб за архив. Примеры там понятные.




© OSzone.net 2001-2012