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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2011, 17:03   #1
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию Как узнать, сохранялся ли в процессе работы файл

Добрый день. Помогите разобраться со следующим вопросом.

Такой сценарий: пользователь открывает файл, работает в нем, сохраняет. Workbook.saved насколько я понимаю становится True, затем он делает еще изменения, она меняется обратно на false. Затем жмет крестик и выходит, при этом на вопрос "сохранить ли изменения?" отвечает НЕТ и файл "откатывается" к последнему сохранению. Как мне отследить, сохранял он его или нет. То есть откатился файл к началу или какому-то новому состоянию.

результат мне нужно получить в булевой переменной, которая должна попасть в следующим образом объявленную процедуру
Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
там в зависимости от результата я совершу действия.
3BEPOBOY вне форума Ответить с цитированием
Старый 18.01.2011, 17:43   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If ThisWorkbook.Saved Then MsgBox "Saved!!!"
End Sub
Если изменения сохранены (или их небыло) - то будет мессидж.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 18.01.2011, 18:23   #3
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

Hugo121
это что вообще такое???
я же написал что после сохранения будут еще изменения и ThisWorkbook.Saved станет false.
3BEPOBOY вне форума Ответить с цитированием
Старый 18.01.2011, 18:27   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну и вот - значит месиджа не будет.
Соотв. , если добавить Else, можете встроить свои действия.
Или Вам нужно узнать, были ли вообще сохранения?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 18.01.2011, 18:33   #5
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Или Вам нужно узнать, были ли вообще сохранения?
да.
Я вроде так и написал сразу)

Последний раз редактировалось 3BEPOBOY; 18.01.2011 в 18:35.
3BEPOBOY вне форума Ответить с цитированием
Старый 18.01.2011, 18:47   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  If ThisWorkbook.Saved Then exit sub
  ' не сохранен. нада шота делать
  ' ...
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 18.01.2011, 18:50   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If ThisWorkbook.path="" Then MsgBox "Файл ещё не сохранялся!"
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 18.01.2011, 20:45   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Может так?
Или там ещё одно условие добавить нужно...
Вложения
Тип файла: zip 3BEPOBOY.zip (8.8 Кб, 14 просмотров)
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 18.01.2011, 21:32   #9
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

EducatedFool
вы не правильно поняли, файл уже сохранен. Вопрос пересохранялся ли в процессе работы. Но предложенный вами вариант возможно тоже когда-нибудь пригодится.
Hugo121
а вы правильно поняли. Подозревал что через BeforSave нужно делать. А вот про глобальные переменные не знал.

По пути домой подумал, похоже мне все-таки и этого знания пока недостаточно для полного решения задачи. Я все дорабатываю "косяки" своего первого макроса, который проверяет файл на изменения и пишет в лог инфу кто и когда сменил. На сегодня не проработан лишь один момент:
1. пользователь открывает файл, изменет, сохраняет.
2. затем удалет изменения, но передумывает и решает их оставить.
3. жмет крестик и "не сохранять"

итого после нажатия крестика макрос проверяет что же наделал пользователь, видит что ничего, и не записывает ничего в лог, после чего происходит откат на сохранение и мы имеем фактически измененный документ, но измменения оказываются незарегистрированными.

Поэтому я решил что если проверить сохранялся ли файл в процессе работы, можно писать в лог если сохранялся, и не писать если нет.

Но тут теперь пользователь может просто открыть файл, сохранить "вхолостую", чиркнуть пару строк и выйти без сохранений, тогда будет ненужная запись в лог...
Хм, только сейчас дошло что я вообще не умею проверять файл на изменения, если пользователь выходит без сохранения.
Подкиньте мысль пожалуйста.
Свой корявый макрос до утра показать не могу, на работе остался.

Но суть такова:
1. при открытии создается скрытый лист, туда копируется содержимое искомого листа
2. при закрытии эти листы сравниваются. Также задается вопрос пользователю, изменял он что-то или нет.
3. Итого в логе оказываются фактические изменения + наврал/не наврал пользователь. Но отследить их при выходе из файла без сохранения пока не очень получается.

Последний раз редактировалось 3BEPOBOY; 18.01.2011 в 21:43.
3BEPOBOY вне форума Ответить с цитированием
Старый 18.01.2011, 22:50   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Отслеживать изменения нужно во всём файле, или только в определённой области?
Изменения формул тоже нужно отслеживать?
Если следить нужно только за значениями в определённой области, то например такой вариант - при открытии файла эти данные берутся в public массив, при закрытии файла первый массив сравнивается с текущим. Тут ещё нужно продумать, что делать при сохранениях в процессе работы - обновлять public или нет, продумать мелочи.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Полное зависание Delphi в процессе работы artemavd Общие вопросы Delphi 10 05.12.2010 05:25
Как можно изменить у DBGrid Datasource в процессе работы приложения ?? Kamelli_13 БД в Delphi 6 01.05.2009 17:14
Как осуществить возможность выбора БД в процессе работы программы Cabyrc БД в Delphi 9 21.03.2009 08:30
Как узнать время работы программы в паскаль? bullvinkle Помощь студентам 2 26.12.2008 11:20
Блокировка функции в процессе ее работы Andr180nag JavaScript, Ajax 2 11.08.2008 18:07