Страницы: 1
RSS
Открытие книги
 
Добрый вечер.  
Открываю книгу:  
Workbooks.Open Filename:="Ольга\Ира\Сборник актов по услугам.xls", что надо дописать чтобы выполнялось условие, что, если она уже открыта, то Exit Sub?  
 
Спс.  
С уважением,  
Ольга
 
Здравствуйте, Ольга.  
А вот так?  
On Error Resume Next  
Workbooks.Open Filename:="Ольга\Ира\Сборник актов по услугам.xls"  
Exit sub
Я сам - дурнее всякого примера! ...
 
Нет, не так. Вот так.  
Public Sub qwe()  
For Each wb In Workbooks  
If wb.Name = "Сборник актов по услугам.xls" Then Exit Sub  
Next  
Workbooks.Open Filename:="Ольга\Ира\Сборник актов по услугам.xls"  
End Sub
Я сам - дурнее всякого примера! ...
 
Добрый вечер, KukIP.  
Нет, так я делала, но это не то.    
 
Надо: если она не открыта, то открыть и далее в неё пойдёт перенос данных.  
А, если она УЖЕ открыта, то exit sub, и пойдёт перенос данных.  
У меня не получается вот с этим "если она уже открыта..."  
 
Там должен быть какой-нибудь if error, да?
 
Не-а.  
Я прям чую, что там должен быть On Error Resume Next  
и If Error...  
 
Он с Вашим кодом только открыл книгу и перенёс данные, а второй раз (уже при открытой книге) ничего переносить не стал :(, а он должен переносить.
 
Может так:  
Public Sub qwe()  
For Each wb In Workbooks  
If wb.Name = "Сборник актов по услугам.xls" And wb.Path = "C:\Ольга\Ира\Сборник актов по услугам.xls" Then  
call перенос данных  
Exit Sub  
End If  
Next  
Workbooks.Open Filename:="I:\Excel\binar.xls"  
call перенос данных  
End Sub  
?  
Так в любом случае: call перенос данных.
Я сам - дурнее всякого примера! ...
 
Вместо "I:\Excel\binar.xls"(на своих проверял)  
"C:\Ольга\Ира\Сборник актов по услугам.xls"
Я сам - дурнее всякого примера! ...
 
А разве Эксель не напишет, что эта книга уже открыта и данные могут потеряться?
 
Оль, а попробовать слабо? Макрос проверяет, если книга открыта - запускает call перенос данных. Если нет - открывает и и запускает call перенос данных.
Я сам - дурнее всякого примера! ...
 
Ну то есть, если книга открыта, то только перенос данных и Exit Sub. Если нет, то открыть и перенос данных. Как еще объяснить... Этот макрос и есть своего рода проверка на Error Resume.
Я сам - дурнее всякого примера! ...
 
Можно использовать функцию для проверки открыта книга или нет  
 
Private Function WorkbookIsOpen(iName$) As Boolean  
'***********************************************'  
'   Дата создания 01/01/2005  
'   Автор Климов Павел Юрьевич  
'   http://www.msoffice.nm.ru  
'***********************************************'  
   On Error Resume Next  
   WorkbookIsOpen = IsObject(Workbooks(iName$))  
End Function  
и проверять по If WorkbookIsOpen("Сборник актов по услугам.xls") then и т.д.
 
Ох, KuklP, дорогой, ВСЁ ПОЛУЧИЛОСЬ КАК ДОКТОР ПРОПИСАЛ!  
СПАСИБО, РАБОТАЕТ.  
 
Игорь из 67-й квартиры, спасибо тебе за внимание, но у меня с KukIP'овским решением прям всё так хорошо, что ничего больше и не надо. Гип-гип Ура!
 
Я обычно в таких случаях (когда надо работать с книгой, но неизвестно, открыта ли она в данный момент) использую такой код:  
 
Sub test()  
   Dim МояКнига As Workbook  
   Set МояКнига = GetObject("Ольга\Ира\Сборник актов по услугам.xls")  
   ' работаем с книгой  
   ' ...  
   МояКнига.Close False    ' закрываем её без сохранения  
End Sub  
 
Если книга открыта - с ней и будет работать макрос.  
Если книга не открыта - она откроется.
 
Игорь, спасибо.  
Я сохраню этот код в тайниках своих сокровищ - наверняка он понадобится!  
 
С уважением,  
Ольга.
 
GetObject почему-то не срабатывает. Вариант красивый. Книга не открывается, EducatedFool, в чём может быть проблема?
 
Попробуйте после  
Set МояКнига = GetObject("Ольга\Ира\Сборник актов по услугам.xls")  
Windows(МояКнига.Name).Visible = True
Я сам - дурнее всякого примера! ...
Страницы: 1
Читают тему
Наверх
Loading...