Проверить что книга открыта excel

Открыта или закрыта книга 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              93424 просмотров


Как проверить открыта ли книга?

Собственно суть темы отражена в названии. Как при выполнении кода из 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(ToolsOptions -вкладка 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
ссылки
статистика

На чтение 3 мин. Просмотров 4.3k.

Что делает макрос: При автоматическом открытии книги, необходимо учитывать, что может произойти при попытке открытия книги, которая уже открыта. Обычно Excel пытается открыть файл еще раз, с предупреждением, что любые несохраненные изменения будут потеряны. В VBA есть хороший инструмент, которые знает, как определить открыта ли книга, прежде чем пытаться открыть его снова.

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как работает этот код
  4. Код макроса
  5. Как использовать

Как макрос работает

Первое, что надо заметить, что это функция, а не процедура 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

Как работает этот код

  1. Первое, что макрос делает – указывает переменную строку, содержащую имя файла, который выбирает пользователь. TestBook это имя переменной строки.
  2. В шаге 2, мы проверяем Excel на ошибки. В случае ошибки, возобновить код. Без этой строки код остановится при возникновении ошибки. Опять же, мы проводим тестирование данного файла, чтобы увидеть, назначен ли он переменной объекта. Поэтому, если данная книга может быть назначена, она открыта, если возникает ошибка, она закрыта. Если возникла ошибка, нам нужно знать код.
  3. На шаге 3, присваиваем книге переменную объекта TestBook. Сама строка переменной называется TargetWorkbook. TargetWorkbook передает функции в объявлении функции (см. первую строку кода). Данная функция устраняет необходимость жесткого кодирования имени книги, что позволяет нам передать его в качестве переменной.
  4. На шаге 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

Как использовать

Чтобы реализовать этот макрос, вы можете скопировать и вставить в обе части кода в стандартном модуле:

  1. Активировать визуальный элемент базовый редактор, нажав клавиши Alt+F11 на клавиатуре.
  2. Щелкните правой кнопкой мыши имя проекта или рабочей книги в окне проекта.
  3. Выбрать Вставку Модуля➜.
  4. Введите или вставьте код в созданный модуль.
  5. При необходимости можно назначить макрос для кнопки

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) ?

Andrei Konstantinov's user avatar

asked Feb 21, 2012 at 6:19

user1222679's user avatar

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's user avatar

Tim Cooper

156k38 gold badges330 silver badges278 bronze badges

answered Feb 21, 2012 at 7:48

Siddharth Rout's user avatar

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 Kusleika's user avatar

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 Williams's user avatar

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

user2267971's user avatar

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 Johnson's user avatar

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

Bulki's user avatar

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 Suresh's user avatar

Kannan SureshKannan Suresh

4,5933 gold badges34 silver badges59 bronze badges

5

ac1-caesar

124 / 3 / 0

Регистрация: 29.07.2013

Сообщений: 249

1

04.08.2013, 11:57. Показов 10506. Ответов 10

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

При заданном условии (А, В, С) должна открыться определенная книга, задача проверить открыта ли она уже и если она открыта выход из процедуры. Потому как по условию (не включено) далее пойдет процедура сохранения и если она уже кем то открыта, то соответственно никакого сохранения не получится.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  Dim Wb As Workbook
    If ComboBox1 = "A" Then
    Set Wb = Workbooks.Open("\Путь необходимого файла для условия - A .xlsx")
    
    Else
    If ComboBox1 = "B" Then
    Set Wb = Workbooks.Open("\Путь необходимого файла для условия - B .xlsx")
    
    Else
    If ComboBox1 = "C" Then
    Set Wb = Workbooks.Open("\Путь необходимого файла для условия - C .xlsx")
    
    Else: Exit Sub
 
    End If
    End If
    End If



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

04.08.2013, 11:57

Ответы с готовыми решениями:

Как в Excel проверить, открыта ли книга?
Как через макросы проверить, открыта ли заданая книга в данный момент, и в каком режиме(read only…

VBA Access: как проверить, открыта ли данная книга Excel
Добрый день! Подскажите пожалуйста, как можно при помощи модуля VBA В Access проверить открыта ли…

Проверить, открыта ли книга Excel
Как проверить, открыта ли книга Excel?
Нужно иметь ввиду, что при этом книга (файл xls) может быть…

Как мне узнать открыта данная книга Excel или нет?
Два раза открываю Excel, например, через ‘StartProgramsMicrosoft Excel’. В каждом из них открываю…

10

The_Prist

1337 / 308 / 74

Регистрация: 13.11.2008

Сообщений: 635

04.08.2013, 13:52

2

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub Check_Open_Book()
    If bBookOpen("Книга1.xls") Then
        MsgBox "Книга открыта", vbInformation, "Сообщение"
    Else
        MsgBox "Книга закрыта", vbInformation, "Сообщение"
    End If
End Sub
Function bBookOpen(wbName As String) As Boolean
    Dim wbBook As Workbook: On Error Resume Next
    Set wbBook = Workbooks(wbName)
    bBookOpen = Not wbBook Is Nothing
End Function



1



124 / 3 / 0

Регистрация: 29.07.2013

Сообщений: 249

04.08.2013, 13:57

 [ТС]

3

Здесь проверяется какая то конкретная книга, а у меня не известно какая будет открываться — А, В или С.



0



The_Prist

1337 / 308 / 74

Регистрация: 13.11.2008

Сообщений: 635

04.08.2013, 14:09

4

А где у Вас в примере видно какая книга должна проверяться? У Вас в примере выдуманные пути и имена. Точнее неясно там путь или имя или просто набор слов. Excel не может сам угадать, что Вам проставить надо. Я дал функцию — в зависимости от своих условий передавайте нужное имя книги, что тут сложного? Через переменную, по условиям или еще как. В любом случае, чтобы проверить открыта книга или нет, надо как минимум знать её имя.

Visual Basic
1
bBookOpen("\Путь необходимого файла для условия - A .xlsx")

Если не хотите предоставить сразу нормальный пример своего кода, тогда старайтесь применить самостоятельно то, что советуют. Лично мне кажется, что мой код не содержит ничего сложного для понимания.



0



124 / 3 / 0

Регистрация: 29.07.2013

Сообщений: 249

04.08.2013, 14:33

 [ТС]

5

Да, я понимаю. Весь код большой и неудобочитаемый. Смотрите у меня уже задана переменная книге — Wb. Но в ней весь путь к книге, а нам, как я понимаю необходимо только имя книги? Сам не могу пристроить, поэтому и обратился.



0



The_Prist

1337 / 308 / 74

Регистрация: 13.11.2008

Сообщений: 635

04.08.2013, 15:09

6

Так Вы выложите нормальный кусок кода, а не ущербное «\Путь необходимого файла для условия — C .xlsx». Из этой строки извлекать ничего не надо — тут только имя. Если переменная Wb содержить полный путь, включая имя и расширение, то получить только имя просто:

Visual Basic
1
2
Dim wbName As String
wbName = Dir(Wb, 16)

И уже wbName использовать:

Visual Basic
1
2
3
4
5
If bBookOpen(wbName) Then
    MsgBox "Книга открыта", vbInformation, "Сообщение"
Else
    MsgBox "Книга закрыта", vbInformation, "Сообщение"
End If



1



124 / 3 / 0

Регистрация: 29.07.2013

Сообщений: 249

04.08.2013, 15:12

 [ТС]

7

Вот это спасибо. Подскажите, что здесь означает цифра 16?

Цитата
Сообщение от The_Prist
Посмотреть сообщение

Dim wbName As String
wbName = Dir(Wb, 16)



0



1337 / 308 / 74

Регистрация: 13.11.2008

Сообщений: 635

04.08.2013, 15:16

8

У Вас справку VBA за неуплату отключили? :-)
16 — vbDirectory. Выделите Dir и нажмите F1, там все описано.



0



Hugo121

6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

04.08.2013, 15:51

9

Вот это — «открыта ли она уже» не разъясните подробнее?
Ну а пока такой код (для «если она уже кем то открыта»):

Visual Basic
1
2
3
4
5
6
7
8
Function IsOpen(File$) As Boolean
    Dim FN%
    FN = FreeFile
    On Error Resume Next
    Open File For Random Access Read Write Lock Read Write As #FN
    Close #FN
    IsOpen = Err
End Function



2



124 / 3 / 0

Регистрация: 29.07.2013

Сообщений: 249

05.08.2013, 14:30

 [ТС]

10

перед процедурой внесения и сохранения данных, нужно убедиться что книга закрыта. И если кто либо эту книгу уже открыл, то должно выскакивать сообщение что книга открыта и выходить из процедуры.
Книга располагается на одном из компьютеров. По локальной сети эту книгу может открыть каждый.



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

05.08.2013, 14:54

11

Ну значит функция выше годится.
В параметре передавать полный путь к файлу (строку).



0



Like this post? Please share to your friends:
  • Проверить формулу в excel ячейке как
  • Проверить на ошибки текст в excel
  • Проверить формулу excel онлайн
  • Проверить на дублирование excel
  • Проверить файл word на уникальность