Страницы: 1
RSS
Открытие файла макросом
 
Макрос из файла 1.xls открывает файл 2.xls. Если во время выполнения макроса файл 2.xls закрыт, то все в порядке. Но если он открыт, то выдается сообщение об ошибке. Как обойти эту проблему?  
Часть кода которым открывается файл следующая:  
 
...  
       ChDir ThisWorkbook.Path  
       Workbooks.Open "2.xls"  
       Windows("1.xls").Activate  
...  
Заранее спасибо.
 
Попробуйте использовать  
Application.DisplayAlerts = False    
в начале кода. Затем верните в исходное.
 
Sub Макрос1()  
Dim Wb2 As Workbook  
   On Error Resume Next  
   Set Wb2 = Workbooks("2.xls")  
   If Err <> 0 Then  
       Err.Clear  
       Set Wb2 = Workbooks.Open(Filename:="C:\Temp\2.xls") 'укажите путь к файлу  
   Else  
       MsgBox "Книга 2.xls уже открыта!", 64, ""  
   End If  
   On Error GoTo 0  
End Sub
 
Ув. Юрий М. Ваш вариант мне подходит, при первой попытке прошло удачно.  
 
Ув. Pavel55. Честно даже не пытался опробовать Ваш код, т.к. он немного великоват по сравнению с предыдущим, но не это главное.    
Workbooks.Open(Filename:="C:\Temp\2.xls") 'укажите путь к файлу  
У меня путь к файлу должен определяться из текущей папки (той где находится сам файл с макросом), и папка эта довольно часто перемещается (или переименовывается) - но оба файла всегда находятся в одной директории. Поэтому жестко привязывать файл к определенному адресу, в моем случае,  не имеет смысла.  
 
Юрий М, Pavel55 спасибо за помощь.
 
Ну и хорошо, что у вас всё получилось.    
 
А я на всякий случай выложу код, который будет брать второй файл из той же папки, где и первый, без указания точного адреса местоположения. Может кому-нибудь другому пригодится  
 
Sub Макрос1()  
Dim Wb2 As Workbook  
   On Error Resume Next  
   Set Wb2 = Workbooks(ThisWorkbook.Path & "/" & "2.xls")  
   If Err <> 0 Then  
       Err.Clear  
       Set Wb2 = Workbooks.Open(Filename:=ThisWorkbook.Path & "/" & "2.xls")  
   Else  
       MsgBox "Книга 2.xls уже открыта!", 64, ""  
   End If  
   On Error GoTo 0  
End Sub
 
хм, я в вышеуказанном коде слэши не туда развернул ( / вместо \ ), но всё работает...
 
Вот так будет совсем хорошо )  
 
Sub Макрос1()  
Dim Wb2 As Workbook  
   On Error Resume Next  
   Set Wb2 = Workbooks(ThisWorkbook.Path & Application.PathSeparator & "2.xls")  
   If Err <> 0 Then  
       Err.Clear  
       Set Wb2 = Workbooks.Open(Filename:=ThisWorkbook.Path & Application.PathSeparator & "2.xls")  
   Else  
       MsgBox "Книга 2.xls уже открыта!", 64, ""  
   End If  
   On Error GoTo 0  
End Sub
Страницы: 1
Читают тему
Наверх