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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2009, 21:35   #1
tolikman
Форумчанин
 
Регистрация: 25.08.2008
Сообщений: 159
Вопрос сохранение

Еще раз здраствуйте.
Вопрос на повестке дня:
есть код, который при сохранении книги отключает обновление экрана и уже в фоновом режиме активирует нужный лист (в котором написано, что надо сделать если отключены макросы) и сохраняет книгу (соответственно при открытии книги этот лист скрывается), вот код:
Код:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim sht As Worksheet
    If Not Prog Then
        Prog = True
        Application.ScreenUpdating = False
        Set sht = ThisWorkbook.ActiveSheet
        With errorHandler.SearchByCP("LOADINGSCREEN")
            .visible = xlSheetVisible
            .Activate
            ThisWorkbook.Save
            .visible = xlSheetVeryHidden
        End With
        sht.Activate
        Application.ScreenUpdating = True
        Prog = False
        ThisWorkbook.Saved = True
        Cancel = True
    End If
End Sub
Все проходит отлично, кроме одного: после такого сохранения в ThisWorkbook.Saved храниться False (т.е. как я понял после Cancel=true, текущий вызов сохранения присваивает saved=false). Подскажите, что с этим можно сделать.
tolikman вне форума Ответить с цитированием
Старый 25.06.2009, 05:02   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
как я понял после Cancel=true, текущий вызов сохранения присваивает saved=false
С чего Вы это взяли? Cancel = true просто осуществляет выход из процедуры сохранения. Если Вы о том, что посе этих действий, при выходе снова предлагается сохранить книгу, то это потому, что после последнего сохранения она была изменена.
Цитата:
Подскажите, что с этим можно сделать.
С этим ничего делать не нужно. Вы лучше скажите, что Вы хотите получить в итоге.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 25.06.2009, 13:15   #3
tolikman
Форумчанин
 
Регистрация: 25.08.2008
Сообщений: 159
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Если Вы о том, что посе этих действий, при выходе снова предлагается сохранить книгу, то это потому, что после последнего сохранения она была изменена.
Именно для этого и надо, чтобы при закрытии не спрашивал. Насчет Cancel=true - мое предположение.
Если принудительно сделать thisWorkbook.Saved=true - то Excel думает что книга сохранена и закрывает без вопросов. Я делаю thisWorkbook.Saved=true перед последним предложением Cancel=true, но сразу после этого любой Sub проверкой thisWorkbook.Saved=false!
В книге ничего изменилось, я просто после сохранения сразу запускаю тестовый Sub и он мне пишет что thisWorkbook.Saved=false. Почему?

А почему я подумал, что cancel=true, так потому, что ведь после завершения обработки события BeforSave, даже при возвращеном Cancel=true, сама функция сохранения продолжается, которая и считывает возвращенное значение. И если вернулось Cancel=true, то ексель не сохраняет книгу, а присваивет ThisWorkbook.saved=false, так как книга не была сохранена. и в результате после отмененного события сохранения получается что ThisWorkbook.saved=false. Просто я больше не как не могу понять ситуацию.

Последний раз редактировалось tolikman; 25.06.2009 в 13:23.
tolikman вне форума Ответить с цитированием
Старый 26.06.2009, 06:37   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Вставьте в модуль "Эта книга" код:
Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean): ThisWorkbook.Saved = True: End Sub
тогда Excel не будет спрашивать про сохранение при закрытии книги.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 26.06.2009 в 09:53.
SAS888 вне форума Ответить с цитированием
Старый 27.06.2009, 19:40   #5
tolikman
Форумчанин
 
Регистрация: 25.08.2008
Сообщений: 159
По умолчанию

Да это понятно. Но мне необходимо следить за изменениями, и просто закрыть без сохранения нельзя. Надо спрашивать пользователя в случае наличия несохраненных изменений о сохранении. Я уже обошел эту проблему, создав переменную BookSaved, при открытии она равна True, а при событиях которые изменяют книгу, она становиться False, и потом, при необходимости, при закрытии книги вылазеет мое сообщение-дубликат: "Сохранить или нет". Но это какая-то тофтология, ведь есть системная переменная.
tolikman вне форума Ответить с цитированием
Старый 30.06.2009, 05:23   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Но это какая-то тофтология, ведь есть системная переменная
Есть. При обработке события Workbook_BeforeSave, логическая переменная SaveAsUI как раз и говорит о том, был ли файл уже сохранен или нет. Т.е. если SaveAsUI = True, значит Excel покажет диалоговое окно "Сохранить как..." Попробуйте контролировать это значение.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 30.06.2009, 14:49   #7
tolikman
Форумчанин
 
Регистрация: 25.08.2008
Сообщений: 159
По умолчанию

спасибо, разберусь...
tolikman вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение файла KREGI Помощь студентам 4 30.03.2009 21:09
Сохранение результатов program123 Общие вопросы Delphi 1 13.03.2009 22:10
Сохранение Патрон Общие вопросы Delphi 21 14.12.2008 14:23
сохранение 1234 Общие вопросы Delphi 11 30.08.2008 11:47
Сохранение Lonix Общие вопросы Delphi 1 22.04.2007 00:15