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

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

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

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

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

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

Подскажите, как закрыть неактивную книгу без выскакивания запросов на сохранение,

это не работает

Код:
       Application.DisplayAlerts = False
       Workbooks(iArchive).Close
       Application.DisplayAlerts = True
Othergirl вне форума Ответить с цитированием
Старый 25.10.2011, 13:42   #2
gluk_fm
Форумчанин
 
Аватар для gluk_fm
 
Регистрация: 09.06.2011
Сообщений: 515
По умолчанию

Workbooks("t.xls").Close SaveChanges:=False
gluk_fm вне форума Ответить с цитированием
Старый 25.10.2011, 13:46   #3
Othergirl
Пользователь
 
Регистрация: 24.10.2011
Сообщений: 18
По умолчанию

Спасибо, работает
Othergirl вне форума Ответить с цитированием
Старый 25.10.2011, 13:50   #4
Othergirl
Пользователь
 
Регистрация: 24.10.2011
Сообщений: 18
По умолчанию

а как проверить открыта ли книга, если да, то выбрать, если нет , то открыть

Код:
                 Workbooks("ReformTech_Number_Register.xlsx").Select
                 If isWorkbookOpen("ReformTech_Number_Register.xlsx") = False Then
                    Workbooks.Open Filename:=iArchive, ReadOnly:=True
                 End If
Тоже не работает
Othergirl вне форума Ответить с цитированием
Старый 25.10.2011, 13:55   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Код:
'скажем, что уже всё сохранено - даже если теперь закрывать вручную, то запроса не будет
Workbooks(iArchive).Saved = True

'или (как выше уже сказали), закрываем кодом без сохранения
Workbooks(iArchive).Close 0
P.S. это я на вопрос ДО отвечал...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 25.10.2011, 13:59   #6
Othergirl
Пользователь
 
Регистрация: 24.10.2011
Сообщений: 18
По умолчанию

А можно на вопрос после тоже,пожалуйста
Othergirl вне форума Ответить с цитированием
Старый 25.10.2011, 14:26   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Я предпочитаю открывать книги сам кодом - тогда точно заню, что открыта, заодно сразу через set задаю переменную-ссылку на объект.
Но если юзер может быть уже открыл - тогда думаю нужно перебором всех открытых книг проверить их .Path, т.к. могут быть много книг с одинаковым именем, но лежать в разных каталогах.
И какую из них открыл "глупый юзер", мы не знаем - вдруг он копию с desktop запустил вместо сетевого ярлыка - сплошь и рядом...
И если так - то ругаемся и не работаем (или безжалостно закрываем и удаляем с диска и открываем нужную ).
В общем, неоднозначно... Нужно продумать процесс, потом реализовывать.

Перебор книг (всех и нескрытых) вот например:

Код:
    For Each WB In Workbooks
        If WB.Name <> ThisWorkbook.Name Then
            If Windows(WB.Name).Visible Then ...
        End If
    Next WB
Или вот проверка на "открытость" без проверки полного пути несколько вариантов:

Код:
===========
Dim wbBook as workbook
On error resume next
set wbBook = workbooks("Книга1.xls")
If wbBook is nothing then 
msgbox "Книга1 не открыта"
else
msgbox "Книга1 открыта"
end if
===========
Function ifopen(wbName As String) As Boolean
Dim wbBook As Workbook
For Each wbBook In Workbooks
If wbBook.Name <> ThisWorkbook.Name Then
If Windows(wbBook.Name).Visible Then
If wbBook.Name Like "*" & wbName & "*" Then ifopen = True: Exit For
End If
End If
Next wbBook
End Function
===========
Function ifopen(w As String) As Boolean
On Error Resume Next
ifopen = Workbooks(w).Name <> ""
End Function
===========
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 25.10.2011, 14:32   #8
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Код:
GetObject("ReformTech_Number_Register.xlsx").Windows(1).Activate
Если книга не открыта, она будет открыта (правда, не в режиме ReadOnly).
exceleved@yandex.ru Яндекс.Деньги: 410011500007619

Последний раз редактировалось Казанский; 25.10.2011 в 14:42.
Казанский вне форума Ответить с цитированием
Старый 25.10.2011, 14:45   #9
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

> нужно перебором всех открытых книг проверить их .Path, т.к. могут быть много книг с одинаковым именем, но лежать в разных каталогах

В Excel - не могут!
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 25.10.2011, 15:05   #10
Othergirl
Пользователь
 
Регистрация: 24.10.2011
Сообщений: 18
По умолчанию

Так, перебор я сделала, но у меня цикл так постоен, что, если книга уже открыта, то она не активная и мне надо книгу активировать. Подскажите команду. Работаю всего с двумя книгами.

нужно что-то вроде ThisWorkbook.Activate

только для другой книги.
Извиняюсь за столь глупый вопрос

Последний раз редактировалось Othergirl; 25.10.2011 в 15:11.
Othergirl вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA excel не удается закрыть и сохранить книгу без возникновения диалогового окна Tvilla Помощь студентам 2 28.06.2012 11:01
Сохранение листа как книгу и отправка его на почту. NoLL Microsoft Office Excel 5 23.11.2010 18:14
Закрыть сохраненную книгу segail Microsoft Office Excel 13 31.03.2010 11:31
Закрыть открыть книгу segail Microsoft Office Excel 14 07.10.2009 18:22
Можно ли создать гостевую книгу, без PHP? Лукманов Александр HTML и CSS 13 05.01.2009 15:39