Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2009, 18:32   #1
robotov
Пользователь
 
Регистрация: 17.06.2009
Сообщений: 14
По умолчанию сохранение файла при закрытии

Возможно ли в excel при закрытии файла (нажатии на "крестик"), чтобы файл сохранялся в определенную директорию с определенным (меняющимся) именем. С именем какой либо ячейки?
Если нет, то в каком случае это возможно?
Спасибо.
robotov вне форума Ответить с цитированием
Старый 15.09.2009, 18:50   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте robotov.
в код модуля документа (не листа) поместите подобный код:
Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ThisWorkbook.SaveAs "C:\документ_" & Sheets("Лист1").Cells(1, 1) & ".xls"
End Sub
и будет Вам счастье.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 16.09.2009, 11:02   #3
#32
Пользователь
 
Аватар для #32
 
Регистрация: 03.09.2009
Сообщений: 11
По умолчанию

а если документ создаётся при помощи userform, где прописывать подобный код? т.е. изначально этого документа (соответственно и модуля) нет
#32 вне форума Ответить с цитированием
Старый 16.09.2009, 11:22   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

В модуле "Эта книга".
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 16.09.2009, 12:17   #5
#32
Пользователь
 
Аватар для #32
 
Регистрация: 03.09.2009
Сообщений: 11
По умолчанию

каждый раз вручную, перед тем как запустить макрос?=))
я создаю новый документ, нажимаю кнопочку на панели, выскакивает окно (userform), в котором я выбираю нужные мне параметры будущего реестра и формирую его соответственно. При закрытии этого реестра должен сохраняться параллельно открытый файлик.
#32 вне форума Ответить с цитированием
Старый 16.09.2009, 12:44   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
я создаю новый документ, нажимаю кнопочку на панели, выскакивает окно (userform)
Где прописана данная процедура? Т.е. у Вас уже есть какой-то макрос, который выполняет все эти действия? В таком случае, можно в книге, где находится этот макрос, создать модуль класса и использовать событие Workbook_BeforeClose уровня приложения (WithEvents XL As Application). В процедуре обработки этого события проверять, если закрывается Ваш файл реестра, то сохранять его.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 16.09.2009, 14:21   #7
robotov
Пользователь
 
Регистрация: 17.06.2009
Сообщений: 14
По умолчанию

Cпасибо, все работает супер, только одна проблемка. Если такой файл уже существует, спрашивает "перезаписать или нет" - я говорю- "нет" и вылетает с ошибкой. в принципе ничего страшного, закрываем дебаггер и все, но хотелось бы эту ошибку убрать.
Последовательность действий такая.
НА компе открыто несколько excel документов.
Я закрываю файл, который автоматом сохраняется, самым верхним крестиком, которых закрывает вообще excel.
Естественно, файл сохраняется, и excel спрашивает хочу ли я сохранить и закрыть остальные файлы.
Я, понимаю, что ошибся, говорю -"отмена" - все файлы восстанавливаются, в том числе и тот, который записался и должен быть закрыт.
Теперь я закрываю этот файл "его крестиком" и он меня спрашивает - такой файл уже существует -перезаписать?. Я говорю -нет и вылетает Дебаггер.

Надеюсь я все досконально описал.

ДА и еще в догонку. Можно ли, чтобы эти сохраняемые файлы-сохранялись БЕЗ макросов?
Спасибо

Последний раз редактировалось robotov; 16.09.2009 в 14:24.
robotov вне форума Ответить с цитированием
Старый 17.09.2009, 05:13   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

По первому вопросу трудно дать ответ без Вашего кода. Дайте текст кода и укажите, на какую строку "ругается" Excel.
По поводу того,
Цитата:
чтобы эти сохраняемые файлы-сохранялись БЕЗ макросов?
необходимо знать имя этого сохраняемого файла, либо делать его активным. Так, например, следующий код "почистит" активный файл, удалив все программные модули, UserForm-ы и все коды из модулей листов и книги:
Код:
Sub DelAll()
    For Each Comp In ActiveWorkbook.VBProject.VBComponents
        With Comp
            Select Case .Type
            Case 1 To 3: .Collection.Remove iVBComponent
            Case 100: .CodeModule.DeleteLines 1, .CodeModule.CountOfLines
            End Select
    End With: Next
End Sub
Если Вы используете события уровня приложения, то по событиям Workbook_BeforeClose и Workbook_BeforeSave можно выполнять этот код. Надежнее перед этим проверять какой файл закрывается (сохраняется) и если это именно тот файл, из которого нужно удалить все коды, то тогда выполнять "чистку". И в коде вместо ActiveWorkbook использовать Workbooks("Имя_файла").
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 17.09.2009 в 05:16.
SAS888 вне форума Ответить с цитированием
Старый 17.09.2009, 10:15   #9
robotov
Пользователь
 
Регистрация: 17.06.2009
Сообщений: 14
По умолчанию

Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ThisWorkbook.SaveAs "C:\Documents and Settings\****\My Documents\Zakazi\Z_" & Sheets("Sheet2").Cells(1, 4) & ".xls"
End Sub
Собственно на эту строку и ругается)
Ошибка "Metod "Save as" of object "_Workbook" failed"

Относительно второго вопроса. Я не очень разбираюсь в программировании на excel поэтому не могу точно сказать, что там у меня и как, но попробую и отпишусь)
Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ThisWorkbook.SaveAs "C:\Documents and Settings\***\My Documents\Zakazi\Z_" & Sheets("Sheet2").Cells(1, 4) & ".xls"
End Sub
Sub DelAll()
    For Each Comp In Workbooks("Z_" & Sheets("Sheet2").Cells(1, 4) & ".xls").VBProject.VBComponents
        With Comp
            Select Case .Type
            Case 1 To 3: .Collection.Remove iVBComponent
            Case 100: .CodeModule.DeleteLines 1, .CodeModule.CountOfLines
            End Select
    End With: Next
End Sub
Непонятно, куда вставлять код очистки. Если я его вставляю до записи, то файла такого еще не сужествует. А если после- то файл уже закрывается и ничего не очищает...

Последний раз редактировалось robotov; 17.09.2009 в 10:33. Причина: неадекватность)
robotov вне форума Ответить с цитированием
Старый 17.09.2009, 10:51   #10
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Т.е. код находится в той книге, которую Вы хотите сохранить, "почистить" от макросов и закрыть"?
Тогда попробуйте так:
Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    On Error Resume Next 'Это исключит "выскакивание" ошибки при нажатии кнопки "Отмена".
    ThisWorkbook.SaveAs "C:\Documents and Settings\***\My Documents\Zakazi\Z_" & Sheets("Sheet2").Cells(1, 4) & ".xls"
    On Error GoTo 0 'Это возвращает обработчик ошибок в нормальное состояние.
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    For Each Comp In ThisWorkbook.VBProject.VBComponents
        With Comp
            Select Case .Type
            Case 1 To 3: .Collection.Remove iVBComponent
            Case 100: .CodeModule.DeleteLines 1, .CodeModule.CountOfLines
            End Select
    End With: Next
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение копии книги при ее закрытии. Busine2009 Microsoft Office Excel 17 17.06.2009 04:36
Запрос при закрытии приложения? Inara Общие вопросы Delphi 2 26.03.2009 20:00
При закрытии книги, удаляются листы Romuald Microsoft Office Excel 3 20.01.2009 21:34
База тормозит при закрытии muu БД в Delphi 1 14.06.2008 20:47
ошибка при закрытии adoquery Банзай БД в Delphi 7 03.09.2007 19:31