Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Сохранение активной книги в exel (http://forum.oszone.net/showthread.php?t=95869)

azbest 10-12-2007 23:46 694740

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

ivank 11-12-2007 00:36 694762

azbest, может код, который ошибку выдаёт, покажете? Я честно говоря не очень понял, в чём проблема.

Alexej77 11-12-2007 22:17 695446

Попробуй так:

Код:

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 695484

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

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

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

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

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

по аналогии

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

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

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

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

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

azbest 12-12-2007 01:36 695525

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

Alexej77 12-12-2007 20:56 696042

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

azbest 14-12-2007 23:04 697476

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


Время: 04:39.

Время: 04:39.
© OSzone.net 2001-