Страницы: 1
RSS
VBA закрытие всех активных книг с сохранением
 
Добрый день уважаемые форумчане, написал (собрал) вот такой вот макрос, обрабатывает он файлы замечательно, но закрывает почему-то не все книги (постоянно приходится в ручную закрывать последнюю).  
Хотелось бы, чтобы макрос закрывал все книги,  а не оставлял 1-2 открытыми.  
Заранее спасибо.    
 
Sub replace()  
' Смена месяца автоматом в актах списания материалов  
Dim T&  
Dim i As Boolean  
Dim oWbk As Workbook  
   Dim oFile, wsSh As Worksheet  
   With Application.FileDialog(msoFileDialogFilePicker)  
       .AllowMultiSelect = True  
       .InitialFileName = "*.xlsx*"  
       .Title = "??????? ????? ??? ????????? ??????"  
       If .Show = False Then Exit Sub  
       For Each oFile In .SelectedItems  
           workbooks.Open oFile, UpdateLinks  
               i = ActiveWorkbook.Name Like "Списание*.xlsx"  
               Select Case i  
               Case True  
               For T = 2 To Sheets.Count - 3  
               Sheets(T).Cells.replace What:="Акт Август", Replacement:="Акт Сентябрь", LookAt:= _  
               xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _  
               ReplaceFormat:=False  
               Next  
               Sheets(1).Select  
               End Select  
       Next oFile  
   End With  
   For Each oWbk In Application.workbooks  
   ActiveWorkbook.Close Savechanges = True  
   Next  
End Sub
 
Допишите  
Next  
ActiveWorkbook.Close Savechanges = True  
End Sub  
должно помочь
 
заменить  
For Each oWbk In Application.workbooks  
ActiveWorkbook.Close Savechanges = True  
Next  
 
на  
 
For Each oWbk In Application.workbooks  
oWbk.Close Savechanges = True  
Next
Живи и дай жить..
 
Спасибо за быстрые ответы, но чет не помогает, видимо слишком кривые руки у меня )
 
нет вру  
 
на  
 
For Each oWbk In Application.workbooks  
if oWbk.name<>thisworkbook.name then oWbk.Close Savechanges = True  
Next  
thisworkbook.close
Живи и дай жить..
 
{quote}{login=слэн}{date=15.09.2011 12:32}{thema=}{post}нет вру  
 
на  
 
For Each oWbk In Application.workbooks  
if oWbk.name<>thisworkbook.name then oWbk.Close Savechanges = True  
Next  
thisworkbook.close{/post}{/quote}  
Спасиб, проверю через час и отпишусь
 
{quote}{login=слэн}{date=15.09.2011 12:32}{thema=}{post}нет вру  
 
на  
 
For Each oWbk In Application.workbooks  
if oWbk.name<>thisworkbook.name then oWbk.Close Savechanges = True  
Next  
thisworkbook.close{/post}{/quote}  
Работает, спасибо, только не понял прикола  почему не работает  
 
For Each oWbk In Application.workbooks  
ActiveWorkbook.Close Savechanges = True  
Next
 
доходит до книги, в которой находится макрос... и закрывает ее, прекращая дальнейшую работу.  
 
ps для последней строки тоже должно быть savechanges=true
Живи и дай жить..
 
{quote}{login=слэн}{date=15.09.2011 01:45}{thema=}{post}доходит до книги, в которой находится макрос... и закрывает ее, прекращая дальнейшую работу.  
 
ps для последней строки тоже должно быть savechanges=true{/post}{/quote}  
 
Нет мне нужно закрытие книги с макросом.  
Не закрывалась книга с макросом + 1 из обрабатываемых книг.  
Почему она не закрывалась так и не понял, пробовал на разных файлах.    
Первая из обрабатываемых книг не закрывалась.
 
если честно - ничего не понял :)
Живи и дай жить..
 
{quote}{login=слэн}{date=15.09.2011 02:53}{thema=}{post}если честно - ничего не понял :){/post}{/quote}  
 
1запускаю макрос  
2макрос выполняется  
3 закрываются все книги обрабатываемые макросом кроме одной (самой первой)  
4 в Итоге 2 открытых книги 1-книга с макросом 2 одна из книг обрабатываемых макросом
 
>>3 закрываются все книги обрабатываемые макросом кроме одной (самой первой)  
Той, в кот. выполняется макрос?  
Application.Quit
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Вообще мне кажется тактически неправильный подход.  
Почему не так? (пример отвлечённый)  
 
Dim wb As Workbook: Set wb = Workbooks.Open(ИмяФайла, , True) ' открываем файл  
sh.Range("a1").Copy wb.Worksheets(1).Range("a1")    
wb.Close True' закрываем открытую книгу  
 
Ну а в конце, если что, то уже и Application.Quit
 
{quote}{login=nerv}{date=15.09.2011 05:24}{thema=}{post}>>3 закрываются все книги обрабатываемые макросом кроме одной (самой первой)  
Той, в кот. выполняется макрос?  
Application.Quit{/post}{/quote}  
Да, в которой выполняется макрос.  
+ Книга в которой макрос записан. (остаются открытыми)  
 
 
Dim wb As Workbook: Set wb = Workbooks.Open(ИмяФайла, , True) ' открываем файл  
sh.Range("a1").Copy wb.Worksheets(1).Range("a1")    
wb.Close True' закрываем открытую книгу  
Боюсь мне не подойдет  
Так как у меня примерно 80 файлов с одинаковой структурой с разными именами и в разных папках, поэтому мне кажется проще открывать книги через File dialog.
 
Ну а попробовать  
Set wb = Workbooks.Open(oFile, , True) ' открываем файл  
 
Правда не знаю, как там UpdateLinks прописывают (если это вообще нужно), но наверняка есть опция.
 
Да хоть так:  
 
With .Workbooks.Open _  
                    (Filename:=oFile, UpdateLinks:=False, ReadOnly:=False)  
...  
...  
.close true  
End with
 
{quote}{login=Hugo}{date=15.09.2011 06:28}{thema=}{post}Ну а попробовать  
Set wb = Workbooks.Open(oFile, , True) ' открываем файл  
 
Правда не знаю, как там UpdateLinks прописывают (если это вообще нужно), но наверняка есть опция.{/post}{/quote}  
 
Про такой подход не знал, спасиб буду пробовать.  
Апдейт линкс нужно обязательно
 
Т.е. UpdateLinks:=True
Страницы: 1
Читают тему
Наверх