Открыта или закрыта книга Excel? Проверяем с помощью кода VBA по краткому или полному имени файла, используя объектную переменную, цикл или оператор Open.
Проверка по краткому имени
Способ проверки по краткому имени, открыта ли рабочая книга, позволяет определить состояние проверяемой книги в том же экземпляре приложения Excel, в котором открыта книга с проверяющим кодом.
Использование объектной переменной
Вариант пользовательской функция VBA Excel, предназначенной для проверки, открыта или закрыта рабочая книга, путем определения результата присвоения ссылки на нее объектной переменной. Присвоение состоялось (BookOpenClosed = True) – книга открыта, произошла ошибка и присвоение не состоялось (BookOpenClosed = False) – книга закрыта.
Function BookOpenClosed(wbName As String) As Boolean Dim myBook As Workbook On Error Resume Next Set myBook = Workbooks(wbName) BookOpenClosed = Not myBook Is Nothing End Function |
Аргумент функции:
- wbName – краткое имя проверяемой рабочей книги.
Перебор открытых книг циклом
Этот вариант функции BookOpenClosed перебирает с помощью цикла все открытые книги Excel и проверяет их краткие имена на совпадение с кратким именем проверяемой книги. Совпадение найдено (BookOpenClosed = True) – книга открыта, совпадение не найдено (BookOpenClosed = False) – книга закрыта.
Function BookOpenClosed(wbName As String) As Boolean Dim myBook As Workbook For Each myBook In Workbooks If myBook.Name = wbName Then BookOpenClosed = True Exit For End If Next End Function |
В коллекцию Workbooks входят и скрытые книги, в том числе Личная книга макросов, и книга с функцией.
Проверка по полному имени
Проверка по полному имени с помощью оператора Open позволяет узнать, открыта ли рабочая книга каким-либо другим процессом: текущим экземпляром Excel, в котором открыта книга с проверяющим кодом, другим экземпляром Excel или сторонним приложением.
Function BookOpenClosed(wbFullName As String) As Boolean Dim ff As Integer ff = FreeFile On Error Resume Next Open wbFullName For Random Access Read Write Lock Read Write As #ff Close #ff BookOpenClosed = (Err.Number <> 0) End Function |
Аргумент функции:
- wbFullName – полное имя проверяемой рабочей книги.
Эта функция открывает с помощью оператора Open файл проверяемой книги с разрешением чтения и записи (параметр access) и запретом чтения и записи, если этот файл уже открыт другим процессом (параметр lock).
Если файл уже открыт другим процессом, а указанный тип доступа (параметр access) не разрешен (параметр lock), операция открытия завершится с ошибкой, а выражение (Err.Number <> 0) возвратит значение True.
Примеры проверки состояния книги
По краткому имени
Sub Primer1() If BookOpenClosed(«Книга1.xlsx») Then MsgBox «Книга открыта» Else MsgBox «Книга закрыта» End If End Sub |
По полному имени
Sub Primer2() If BookOpenClosed(«C:Папка1Папка2Папка3Книга1.xlsx») Then MsgBox «Книга открыта» Else MsgBox «Книга закрыта» End If End Sub |
Хитрости »
4 Май 2011 93425 просмотров
Как проверить открыта ли книга?
Собственно суть темы отражена в названии. Как при выполнении кода из VBA узнать перед обращением к книге открыта она или нет? Ведь если книга закрыта, то обращение к ней вызовет ошибку, а если открывать без проверки — то это может повлечь за собой утерю данных, если предварительно эта книга не была сохранена. Ни один ни второй вариант, естественно, не устраивают. Я покажу два способа проверки через функции. Если функция вернет True — книга открыта, если False — закрыта. Для проверки функций используем проверочную процедуру Check_Open_Book:
Sub Check_Open_Book() If IsBookOpen("Книга1.xls") Then MsgBox "Книга открыта", vbInformation, "Сообщение" Else MsgBox "Книга закрыта", vbInformation, "Сообщение" 'открываем книгу Workbooks.Open "C:Книга1.xls" End If End Sub
Данная процедура вызывает функцию IsBookOpen, передавая ей в качестве параметра имя книги, «открытость» которой мы хотим проверить. Я приведу несколько вариантов самой функции IsBookOpen. Во всех вариантах действует один и тот же принцип: код любого из вариантов функции IsBookOpen необходимо скопировать и вставить в стандартный модуль. Модуль должен быть внутри той книги, в кодах которой планируется проверять открыта ли книга. Только тогда IsBookOpen будет доступна для вызова из любого кода этой же книги.
Если вдруг в момент выполнения на строке If IsBookOpen(«Книга1.xls») Then появится ошибка «Sub or function not defined» — значит функция IsBookOpen либо не была скопирована в стандартный модуль, либо она вообще не в стандартном модуле, а в модуле листа, формы или книги.
Вариант 1:
Function IsBookOpen(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 = wbName Then IsBookOpen = True: Exit For End If End If Next wbBook End Function
Функция просматривает все открытые книги и если находит среди них книгу с указанным именем, то функция возвращает True. Есть небольшая особенность — функция исключает скрытые книги(это либо надстройки, либо PERSONAL.XLS). Так же из просмотра исключена та книга, в которой расположен сам код. Если Вам нужно проверить наличие книги независимо от её видимости, то необходимо просто заменить блок
If Windows(wbBook.Name).Visible Then If wbBook.Name = wbName Then IsBookOpen = True: Exit For End If
на одну строку(просто убрать лишнее условие проверки)
If wbBook.Name = wbName Then IsBookOpen = True: Exit For
Либо можно использовать
Вариант 2:
Function IsBookOpen(wbName As String) As Boolean Dim wbBook As Workbook: On Error Resume Next Set wbBook = Workbooks(wbName) IsBookOpen = Not wbBook Is Nothing End Function
Данный способ обращается к любой открытой книге, даже если она скрыта как PERSONAL.XLS или надстройка. Однако у данной функции есть недостаток — используется оператор On Error и если в настройках VBA(Tools —Options -вкладка General) установлено Break on All Errors — то этот код не сработает, если книга не открыта — получим ошибку. В то время как Вариант1 с циклом по всем открытым книгам сработает без ошибок.
Вариант 3:
По просьбам читателей решил добавить код, который проверяет открыта ли книга независимо от её месторасположения и используемого приложения Excel. Книга может быть открыта другим пользователем (если книга на сервере), в другом экземпляре Excel или в этом же экземпляре Excel.
Function IsBookOpen(wbFullName As String) As Boolean Dim iFF As Integer, retval As Boolean iFF = FreeFile On Error Resume Next Open wbFullName For Random Access Read Write Lock Read Write As #iFF retval = (Err.Number <> 0) Close #iFF IsBookOpen = retval End Function
Функция несколько отличается от приведенных выше — передается в неё не только имя книги, а полный путь к книге, включая имя и расширение:
Sub Test() MsgBox "Файл 'Книга1'" & IIf(IsBookOpen("C:Книга1.xls"), " уже открыт", " не занят") End Sub
Или более близкий к жизненной ситуации вариант: надо открыть книгу, внести в книгу изменения, сохранить и закрыть. Если книга кем-то уже открыта — получим ошибку на этапе сохранения или запрос на этапе открытия. Поэтому сначала проверяем доступность книги и если она доступна — вносим изменения и сохраняем.
Sub Test() Dim sWBFullName As String Dim wb As Workbook 'полный путь к проверяемой книге sWBFullName = "C:DocumentsКнига1.xls" 'если книга кем-то открыта - пропускаем обработку этой книги 'книга закрыта - вносим изменения, сохраняем, закрываем If IsBookOpen(sWBFullName) = False Then Set wb = Application.Workbooks.Open(sWBFullName) 'изменяем значение ячейки "A1" на первом листе книги wb.Sheets(1).Range("A1").Value = "www.excel-vba.ru" ws.Close True End If End Sub
При использовании функции IsBookOpen так же надо учитывать, что она может посчитать книгу открытой не только если она реально кем-то открыта, а если к ней просто нет доступа(например, заблокирован доступ со стороны администратора и т.п.).
Также см.:
Как получить данные из закрытой книги?
Как узнать существует ли лист в книге?
Как узнать существует ли модуль в книге
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
In VBA, I opened an MS Excel file named «myWork.XL» programmatically.
Now I would like a code that can tell me about its status — whether it is open or not. I.e. something like IsWorkBookOpened("myWork.XL)
?
asked Feb 21, 2012 at 6:19
0
Try this:
Option Explicit
Sub Sample()
Dim Ret
Ret = IsWorkBookOpen("C:myWork.xlsx")
If Ret = True Then
MsgBox "File is open"
Else
MsgBox "File is Closed"
End If
End Sub
Function IsWorkBookOpen(FileName As String)
Dim ff As Long, ErrNo As Long
On Error Resume Next
ff = FreeFile()
Open FileName For Input Lock Read As #ff
Close ff
ErrNo = Err
On Error GoTo 0
Select Case ErrNo
Case 0: IsWorkBookOpen = False
Case 70: IsWorkBookOpen = True
Case Else: Error ErrNo
End Select
End Function
Tim Cooper
156k38 gold badges330 silver badges278 bronze badges
answered Feb 21, 2012 at 7:48
Siddharth RoutSiddharth Rout
146k17 gold badges206 silver badges250 bronze badges
12
For my applications, I generally want to work with a workbook rather than just determine if it’s open. For that case, I prefer to skip the Boolean function and just return the workbook.
Sub test()
Dim wb As Workbook
Set wb = GetWorkbook("C:UsersdickDropboxExcelHoops.xls")
If Not wb Is Nothing Then
Debug.Print wb.Name
End If
End Sub
Public Function GetWorkbook(ByVal sFullName As String) As Workbook
Dim sFile As String
Dim wbReturn As Workbook
sFile = Dir(sFullName)
On Error Resume Next
Set wbReturn = Workbooks(sFile)
If wbReturn Is Nothing Then
Set wbReturn = Workbooks.Open(sFullName)
End If
On Error GoTo 0
Set GetWorkbook = wbReturn
End Function
answered Feb 21, 2012 at 17:18
Dick KusleikaDick Kusleika
32.5k4 gold badges51 silver badges73 bronze badges
6
If its open it will be in the Workbooks collection:
Function BookOpen(strBookName As String) As Boolean
Dim oBk As Workbook
On Error Resume Next
Set oBk = Workbooks(strBookName)
On Error GoTo 0
If oBk Is Nothing Then
BookOpen = False
Else
BookOpen = True
End If
End Function
Sub testbook()
Dim strBookName As String
strBookName = "myWork.xls"
If BookOpen(strBookName) Then
MsgBox strBookName & " is open", vbOKOnly + vbInformation
Else
MsgBox strBookName & " is NOT open", vbOKOnly + vbExclamation
End If
End Sub
answered Feb 21, 2012 at 8:44
Charles WilliamsCharles Williams
23.1k5 gold badges37 silver badges38 bronze badges
2
I would go with this:
Public Function FileInUse(sFileName) As Boolean
On Error Resume Next
Open sFileName For Binary Access Read Lock Read As #1
Close #1
FileInUse = IIf(Err.Number > 0, True, False)
On Error GoTo 0
End Function
as sFileName you have to provide direct path to the file for example:
Sub Test_Sub()
myFilePath = "C:UsersUserNameDesktopexample.xlsx"
If FileInUse(myFilePath) Then
MsgBox "File is Opened"
Else
MsgBox "File is Closed"
End If
End Sub
answered Mar 10, 2014 at 19:39
user2267971user2267971
3631 gold badge4 silver badges12 bronze badges
What if you want to check without creating another Excel instance?
For example, I have a Word macro (which is run repeatedly) that needs to extract data from an Excel spreadsheet. If the spreadsheet is already open in an existing Excel instance, I would prefer not to create a new instance.
I found a great answer here that I built on:
http://www.dbforums.com/microsoft-access/1022678-how-check-wether-excel-workbook-already-open-not-search-value.html
Thanks to MikeTheBike and kirankarnati
Function WorkbookOpen(strWorkBookName As String) As Boolean
'Returns TRUE if the workbook is open
Dim oXL As Excel.Application
Dim oBk As Workbook
On Error Resume Next
Set oXL = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
'Excel is NOT open, so the workbook cannot be open
Err.Clear
WorkbookOpen = False
Else
'Excel is open, check if workbook is open
Set oBk = oXL.Workbooks(strWorkBookName)
If oBk Is Nothing Then
WorkbookOpen = False
Else
WorkbookOpen = True
Set oBk = Nothing
End If
End If
Set oXL = Nothing
End Function
Sub testWorkbookOpen()
Dim strBookName As String
strBookName = "myWork.xls"
If WorkbookOpen(strBookName) Then
msgbox strBookName & " is open", vbOKOnly + vbInformation
Else
msgbox strBookName & " is NOT open", vbOKOnly + vbExclamation
End If
End Sub
answered Aug 9, 2013 at 7:19
Derek JohnsonDerek Johnson
9271 gold badge11 silver badges15 bronze badges
This one is a bit easier to understand:
Dim location As String
Dim wbk As Workbook
location = "c:excel.xls"
Set wbk = Workbooks.Open(location)
'Check to see if file is already open
If wbk.ReadOnly Then
ActiveWorkbook.Close
MsgBox "Cannot update the excelsheet, someone currently using file. Please try again later."
Exit Sub
End If
answered Jul 9, 2013 at 14:26
BulkiBulki
7341 gold badge10 silver badges30 bronze badges
1
Checkout this function
'********************************************************************************************************************************************************************************
'Function Name : IsWorkBookOpen(ByVal OWB As String)
'Function Description : Function to check whether specified workbook is open
'Data Parameters : OWB:- Specify name or path to the workbook. eg: "Book1.xlsx" or "C:UsersKannan.SDesktopBook1.xlsm"
'********************************************************************************************************************************************************************************
Function IsWorkBookOpen(ByVal OWB As String) As Boolean
IsWorkBookOpen = False
Dim WB As Excel.Workbook
Dim WBName As String
Dim WBPath As String
Err.Clear
On Error Resume Next
OWBArray = Split(OWB, Application.PathSeparator)
Set WB = Application.Workbooks(OWBArray(UBound(OWBArray)))
WBName = OWBArray(UBound(OWBArray))
WBPath = WB.Path & Application.PathSeparator & WBName
If Not WB Is Nothing Then
If UBound(OWBArray) > 0 Then
If LCase(WBPath) = LCase(OWB) Then IsWorkBookOpen = True
Else
IsWorkBookOpen = True
End If
End If
Err.Clear
End Function
answered Nov 14, 2013 at 16:33
Kannan SureshKannan Suresh
4,5933 gold badges34 silver badges59 bronze badges
5
VBA tries to evaluate all the parts before it evaluates the conditional statement. So if I have a variable myvar = "xyz"
and try to run the following lines…
If IsNumeric(myvar) And Round(myvar, 1) = 3 Then
'you will get an error before the IF is evaluated
End If
it will not work. VBA will evaluate IsNumeric(myvar)
fine, then try to evaluate Round(myvar, 1) = 3
and get an error before it checks the entire conditional. So VBA will let you know about the error before it performs the AND
operator. If VBA had short circuit evaluation, it would work fine since the first part would evaluate to false.
But the following will work
If IsNumeric(myvar) Then
If Round(myvar, 1) = 3 Then
'second IF statement is not touched since first IF statement evaluates to false
End If
End If
This works because IsNumeric(myvar)
evaluates to false and therefore skips the nested statement.
So the error it throws on the Workbooks(filename)
will just give the error unless you tell it to resume next. So the method I use is
On Error Resume Next
Set wb = Workbooks(file)
If wb Is Nothing Then
Set wb = Application.Workbooks.Open(dir & "" & file, ReadOnly:=True)
End If
On Error GoTo 0
Edited to give more detail and correctly capture that the second example will not be evaluated as well as provide a useful solution for the question at hand.
На чтение 3 мин. Просмотров 4.3k.
Что делает макрос: При автоматическом открытии книги, необходимо учитывать, что может произойти при попытке открытия книги, которая уже открыта. Обычно Excel пытается открыть файл еще раз, с предупреждением, что любые несохраненные изменения будут потеряны. В VBA есть хороший инструмент, которые знает, как определить открыта ли книга, прежде чем пытаться открыть его снова.
Содержание
- Как макрос работает
- Код макроса
- Как работает этот код
- Код макроса
- Как использовать
Как макрос работает
Первое, что надо заметить, что это функция, а не процедура Sub. Мы проверяем файл, чтобы увидеть, назначен ли он переменной объекта. Только открытые книги могут быть присвоены переменной объекта. Когда мы пытаемся назначить закрытую книгу для переменной, возникает ошибка. Так что, если данная книга может быть назначена, книга открыта, если возникает ошибка, книга закрыта.
Код макроса
Function FileIsOpenTest(TargetWorkbook As String) As Boolean 'Шаг 1: Объявить переменные Dim TestBook As Workbook 'Шаг 2: проверка на ошибки On Error Resume Next 'Шаг 3: Попробуйте проверить книгу Set TestBook = Workbooks(TargetWorkbook) 'Шаг 4: Если ошибки не произошло, книга уже открыта If Err.Number = 0 Then FileIsOpenTest = True Else FileIsOpenTest = False End If End Function
Как работает этот код
- Первое, что макрос делает – указывает переменную строку, содержащую имя файла, который выбирает пользователь. TestBook это имя переменной строки.
- В шаге 2, мы проверяем Excel на ошибки. В случае ошибки, возобновить код. Без этой строки код остановится при возникновении ошибки. Опять же, мы проводим тестирование данного файла, чтобы увидеть, назначен ли он переменной объекта. Поэтому, если данная книга может быть назначена, она открыта, если возникает ошибка, она закрыта. Если возникла ошибка, нам нужно знать код.
- На шаге 3, присваиваем книге переменную объекта TestBook. Сама строка переменной называется TargetWorkbook. TargetWorkbook передает функции в объявлении функции (см. первую строку кода). Данная функция устраняет необходимость жесткого кодирования имени книги, что позволяет нам передать его в качестве переменной.
- На шаге 4, проверяем, произошла ли ошибка. Если ошибки не произошло, книга открыта, поэтому мы устанавливаем FileIsOpenTest в True. Если произошла ошибка, это означает, что книга не открыта. В этом случае мы устанавливаем FileIsOpenTest значение false.
Это функция может быть использована для оценки любого файла, который передаст к нему, через его TargetWorkbook аргумент. Мы будем использовать затем эту функцию в макросе. Следующий макрос показывает, как реализовать эту функцию. Здесь мы используем одни и те же макросы, которые вы видели в предыдущем разделе, «Как открыть конкретную книгу, определенную пользователем», но на этот раз, мы создаем новую функцию FileIsOpenTest, чтобы убедиться, что пользователь не может открыть уже открытый файл.
Код макроса
Sub MacroOtkritaLiKniga() 'Шаг 1: Определить переменную строки. Dim FName As Variant Dim FNFileOnly As String 'Шаг 2: Метод GetOpenFilename активизирует диалоговое окно. FName = Application.GetOpenFilename( _ FileFilter:="Excel Workbooks,*.xl*", _ Title:="Выберите книгу, которую нужно открыть", _ MultiSelect:=False) 'Шаг 3: Откройте файл, если он еще не открыт. If FName <> False Then FNFileOnly = StrReverse(Left(StrReverse(FName), _ InStr(StrReverse(FName), "") - 1)) If FileIsOpenTest(FNFileOnly) = True Then MsgBox "Данный файл уже открыт" Else Workbooks.Open Filename:=FName End If End If End Sub
Как использовать
Чтобы реализовать этот макрос, вы можете скопировать и вставить в обе части кода в стандартном модуле:
- Активировать визуальный элемент базовый редактор, нажав клавиши Alt+F11 на клавиатуре.
- Щелкните правой кнопкой мыши имя проекта или рабочей книги в окне проекта.
- Выбрать Вставку Модуля➜.
- Введите или вставьте код в созданный модуль.
- При необходимости можно назначить макрос для кнопки
Option Compare Text ‘Если Вы не понимаете, зачем используется эта инструкция, то оставьте её в покое
Private Function WorkbookIsOpen(iName$) As Boolean
‘***********************************************’
‘ Дата создания 01/01/2005
‘ Автор Климов Павел Юрьевич
‘
http://www.msoffice.nm.ru
‘***********************************************’
Dim iBook As Workbook
For Each iBook In Workbooks
If iBook.Name = iName$ Then
WorkbookIsOpen = True
Exit Function
End If
Next
WorkbookIsOpen = False
End Function
Private Function WorkbookIsOpen(iName$) As Boolean
‘***********************************************’
‘ Дата создания 01/01/2005
‘ Автор Климов Павел Юрьевич
‘
http://www.msoffice.nm.ru
‘***********************************************’
Dim iBook As Workbook
For Each iBook In Workbooks
If StrComp(iBook.Name, iName$, vbTextCompare) = 0 Then
WorkbookIsOpen = True
Exit Function
End If
Next
WorkbookIsOpen = False
End Function
Вариант II.
Private Function WorkbookIsOpen(iName$) As Boolean
‘***********************************************’
‘ Дата создания 01/01/2005
‘ Автор Климов Павел Юрьевич
‘
http://www.msoffice.nm.ru
‘***********************************************’
On Error Resume Next
WorkbookIsOpen = IsObject(Workbooks(iName$))
End Function
Private Function WorkbookIsOpen(iName$) As Boolean
On Error Resume Next
WorkbookIsOpen = (TypeOf Workbooks(iName$) Is Workbook)
End Function
Private Function WorkbookIsOpen(iName$) As Boolean
On Error Resume Next
WorkbookIsOpen = (TypeName(Workbooks(iName$)) = «Workbook»)
End Function
Private Function WorkbookIsOpen(iName$) As Boolean
On Error Resume Next
WorkbookIsOpen = (VarType(Workbooks(iName$)) = vbObject)
End Function
Private Function WorkbookIsOpen(iName$) As Boolean
On Error Resume Next
WorkbookIsOpen = Len(Workbooks(iName$).Name) > 0
End Function
Private Function WorkbookIsOpen(iName$) As Boolean
On Error Resume Next
WorkbookIsOpen = Workbooks(iName$).Index > 0
End Function
Пример вызова любой из вышеопубликованных авторских функций :
Private Sub Test()
MsgBox WorkbookIsOpen(«Имя_Книги.xls»)
End Sub
В повседневной работе Excel вы открываете несколько книг одновременно для работы, но иногда сотни книг могут запутать вам голову, чтобы вспомнить, открыта или закрыта конкретная книга. Откажитесь от традиционного метода проверки файлов по одному, здесь я познакомлю вас с приемами, позволяющими быстро найти открытую или закрытую книгу.
Проверьте, открыта или закрыта книга с помощью VBA
Проверьте, открыта ли книга или закрыта с помощью Kutools for Excel
Проверьте, открыта или закрыта книга с помощью VBA
Вот код VBA, который вы можете запустить, чтобы проверить, открыта или закрыта конкретная книга.
1. Нажмите Alt + F11 ключи для открытия Microsoft Visual Basic для приложений окно.
2. Нажмите Вставить > Модули а затем скопируйте и вставьте VBA в новый Модули окно.
VBA: проверьте, открыта или закрыта книга
Function IsWorkBookOpen(Name As String) As Boolean
Dim xWb As Workbook
On Error Resume Next
Set xWb = Application.Workbooks.Item(Name)
IsWorkBookOpen = (Not xWb Is Nothing)
End Function
Sub Sample()
Dim xRet As Boolean
xRet = IsWorkBookOpen("combine.xlsx")
If xRet Then
MsgBox "The file is open", vbInformation, "Kutools for Excel"
Else
MsgBox "The file is not open", vbInformation, "Kutools for Excel"
End If
End Sub
3. И нажмите F5 нажмите клавишу, чтобы запустить эту vba, и появится диалоговое окно, напоминающее вам, открыта конкретная книга или нет.
Наконечник: В приведенном выше VBA «объединять»- это имя книги, которую вы хотите проверить, вы можете использовать ее по своему усмотрению.
Проверьте, открыта ли книга или закрыта с помощью Kutools for Excel
Если вы не знакомы с VBA, вы можете проверить, открыта ли книга, с помощью Kutools for Excel, с его Навигация панель, которая поможет вам четко просмотреть все открытые книги в списке книг на панели.
После бесплатная установка Kutools for Excel, пожалуйста, сделайте следующее:
1. Нажмите Кутулс > Навигация , чтобы включить панель навигации. Смотрите скриншот:
2. Затем нажмите Рабочая тетрадь и лист кнопку, чтобы развернуть панель и перейти к Рабочая тетрадь и лист раздел. И вы можете просмотреть все открытые книги в верхнем списке. Смотрите скриншот:
Работы С Нами Навигация панели, вы также можете быстро переключаться между книгами или листами в списке.
Щелкните здесь, чтобы узнать больше о навигации.
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (5)
Оценок пока нет. Оцените первым!
Нужно узнать открыт ли в Excele нужный мне файл или нет. Если открыт то активизировать его и работать с ним. А вообще даже не знаю как проверить запущен ли сам Excel.
Проблема в том, что vba крутится под другим приложением, хотя наверно это не проблема.
8 ответов
18K
06 июля 2007 года
pavel55
79 / / 14.05.2007
Я бы сделал бы так
Код:
Sub Макрос1()
Dim WB As Workbook
Dim myWorkBook As String
myWorkBook = «Бюджет.xls» ‘задаём имя искомой книги
On Error Resume Next
Windows(myWorkBook).Activate
If Err.Number = 9 Then
MsgBox «Книга » & myWorkBook & » не открыта!», , «»
End If
On Error GoTo 0
End Sub
или так
Код:
Sub Макрос2()
Dim WB As Workbook
Dim myWorkBook As String
myWorkBook = «Бюджет.xls» ‘задаём имя искомой книги
For Each WB In Application.Workbooks
If WB.Name = myWorkBook Then
Windows(WB.Name).Activate
End
End If
Next
If ActiveWorkbook.Name <> myWorkBook Then MsgBox «Книга » & myWorkBook & » не открыта!», , «»
End Sub
10K
09 июля 2007 года
NaeR
6 / / 06.04.2005
первый вариант работает на ура, но проблемы начинаются после нескольких программных пусков excel’я и ручных закрытий. потом он перестаёт его видеть и начинает постоянно открывать новые копии книги. со вторым вариантом дело обстоит также.
пробовал на двух машинах 2k sp4 и xp sp2. excel 2003(11).
31K
12 июля 2007 года
migor69
1 / / 09.07.2007
dim EX as Excel.Application
Dim WB As Workbook
………………………………
………………………….
открытие книги…
……работа
закрытие и сохранение книги
EX.Quit..Закрытие Excel …………Иначе книга остается открытой
15K
16 июля 2007 года
vkodor
41 / / 04.07.2006
Код:
Public Function WorkbookIsOpen(wbname) As Boolean
‘проверка открыт фаил или нет
Dim x
On Error Resume Next
Set x = Workbooks(wbname)
If Err = 0 Then WorkbookIsOpen = True
Set x = Nothing
End Function
10K
19 июля 2007 года
NaeR
6 / / 06.04.2005
проблема в том что всеми этими способами я не вижу была ли открыта книга до того как была запущена моя программа. а это очень важно т.к. книга повторно откроется только для чтения, а мне надо писать в неё данные каждые 2 часа. запретить открывать книгу я тоже не могу т.к. она может быть нужна для просмотра данных.
может есть какие другие способы, через winapi или еще как, чтобы можно было 100% определить открыта ли книга и если да то писать в неё
6.4K
19 июля 2007 года
Host
122 / / 22.09.2005
проблема в том что всеми этими способами я не вижу была ли открыта книга до того как была запущена моя программа…
Проверяй на существование экземпляр Excel.
Код:
Function CheckWorksheet(strName As String) As Boolean
On Error Resume Next
Dim pExcel As Excel.Application
‘Получаем объект
Set pExcel = GetObject(class:=»Excel.Application»)
If Not pExcel Is Nothing Then
Dim wb As Workbook
‘Проверяем наличие открытой книги
Set wb = pExcel.Workbooks(strName)
If Not wb Is Nothing Then
CheckWorksheet = True
Else
CheckWorksheet = False
End If
Exit Function
End If
CheckWorksheet = False
End Function
10K
20 июля 2007 года
NaeR
6 / / 06.04.2005
Host спасибо! похоже твой вариант работает. я уже было чуть не отчаялся
10K
21 июля 2007 года
NaeR
6 / / 06.04.2005
Host можешь объяснить какая разница между твоим примером и остальными, почему твой работает а предыдущие нет. хотя по логике вещей работать должны все примеры