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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2010, 13:51   #1
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию Закрытие Workbook

Вопрос такой. Мне требуется закрыть без изменений и лишних вопросов книгу, для этого я использую
Код:
Application.DisplayAlerts = False
Application.Quit
Если открыта всего одна книга, все хорошо. Но если таковых несколько, закроются все вместе с оболочкой Application, причем также без сохранений. А это уже нехорошо.
До этого использовал какую-то команду, которая закрывала книгу, но оболочку не трогала. То есть устраивало лишь в случае с многими книгами.

Помогите найти компромисс!
3BEPOBOY вне форума Ответить с цитированием
Старый 29.12.2010, 14:02   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

activeworkbook.close - закрытие книги (если книга не сохранена, будет задан вопрос)

activeworkbook.close TRUE - закрытие книги с принудительным сохранением
activeworkbook.close FALSE - закрытие книги без сохранения

Во встроенной справке по VBA всё это написано
EducatedFool вне форума Ответить с цитированием
Старый 29.12.2010, 14:33   #3
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

Вы меня не поняли. Мне не нужно просто закрыть книгу.
Нужно чтобы:
1) не было никаких вопросов сохранять или нет
2) чтобы закрывался Excel полностью, а не книжки внутри оболочки
3) чтобы макрос не трогал другие открытые файлы, если таковые имеются

activeworkbook.close мне ничего не дает
3BEPOBOY вне форума Ответить с цитированием
Старый 29.12.2010, 14:35   #4
аналитика
Форумчанин
 
Регистрация: 14.05.2009
Сообщений: 311
По умолчанию

Код:
If wb.Saved Then
         Exit Sub
      Else
         msg = "Сохранить изменения в файле '" & wb.Name & "'?"
         Select Case MsgBox(msg, vbExclamation + vbYesNoCancel)
         Case vbYes
            wb.Save
         Case vbNo
            wb.Saved = True   'не сохраняя книгу, показывает приложению, что она сохранена!!!
         Case vbCancel
            Cancel = True
         End Select
      End If

Последний раз редактировалось аналитика; 29.12.2010 в 14:39.
аналитика вне форума Ответить с цитированием
Старый 29.12.2010, 14:45   #5
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

аналитика
можете переделать мой код?
его задача заменить стандартное диалоговое окно. А смысл в том что сюда на кнопки да/нет еще действия навешаны будут.
Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim x As Integer
x = MsgBox("Сохранить изменения в файле '" & ThisWorkbook.Name & "'?", vbYesNoCancel, "Microsof Office Excel")

If x = 7 Then
MsgBox ("Нажато NO")
  ThisWorkbook.Saved = True
  Application.DisplayAlerts = False
  Application.Quit ----???
Else
   If x = 6 Then
        MsgBox " Нажато YES"
        ActiveWorkbook.Save
      Else
        If x = 2 Then
            Cancel = True
            MsgBox " НажатоCancel"
        End If
   End If
End If

End Sub
3BEPOBOY вне форума Ответить с цитированием
Старый 29.12.2010, 15:00   #6
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

аналитика
превратил ваш код вот в такой макрос:
Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim wb As Workbook
Set wb = ActiveWorkbook
If wb.Saved Then
         Exit Sub
      Else
         msg = "Сохранить изменения в файле '" & wb.Name & "'?"
         Select Case MsgBox(msg, vbExclamation + vbYesNoCancel)
         Case vbYes
            wb.Save
            MsgBox "да"
         Case vbNo
            wb.Saved = True   'не сохраняя книгу, показывает приложению, что она сохранена!!!
            MsgBox "нет"
         Case vbCancel
            Cancel = True
            MsgBox "отмена"
         End Select
      End If
      
End Sub
Работает не совсем так как нужно. Когда открыто несколько книг, он пытается закрыть и другие. При этом спрашивает. Я жму "отмена", другие не закрываются, но вместе с ними не закрывается и нужная.
HELP!
3BEPOBOY вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с объектами Workbook,worksheets,range savraska Microsoft Office Excel 2 27.05.2010 10:53
Поиск файлов по маске и их открытие в 1 workbook Toliyn Microsoft Office Excel 1 21.04.2010 04:45
закрытие транзакций ancia Lazarus, Free Pascal, CodeTyphon 3 11.03.2010 16:12
Закрытие приложения. docbrain Помощь студентам 8 06.02.2010 05:27
Закрытие программы Zloy_Doomer Общие вопросы Delphi 3 23.06.2008 19:08