Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/36: Рейтинг темы: голосов - 36, средняя оценка - 4.50
ac1-caesar
124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 245
1

Как проверить открыта ли книга если ей задана переменная (excel 2010)

04.08.2013, 11:57. Просмотров 6888. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2013, 11:57
Ответы с готовыми решениями:

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

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

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

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

Как определить, что открыта панель Персонализации и завершить её, если она открыта?
Я понимаю, что необходимо узнать Hendle окна. Но как узнать хэндл Панель управления\Все элементы...

10
The_Prist
1311 / 290 / 65
Регистрация: 13.11.2008
Сообщений: 604
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
ac1-caesar
124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 245
04.08.2013, 13:57  [ТС] 3
Здесь проверяется какая то конкретная книга, а у меня не известно какая будет открываться - А, В или С.
0
The_Prist
1311 / 290 / 65
Регистрация: 13.11.2008
Сообщений: 604
04.08.2013, 14:09 4
А где у Вас в примере видно какая книга должна проверяться? У Вас в примере выдуманные пути и имена. Точнее неясно там путь или имя или просто набор слов. Excel не может сам угадать, что Вам проставить надо. Я дал функцию - в зависимости от своих условий передавайте нужное имя книги, что тут сложного? Через переменную, по условиям или еще как. В любом случае, чтобы проверить открыта книга или нет, надо как минимум знать её имя.
Visual Basic
1
bBookOpen("\\Путь необходимого файла для условия - A .xlsx")
Если не хотите предоставить сразу нормальный пример своего кода, тогда старайтесь применить самостоятельно то, что советуют. Лично мне кажется, что мой код не содержит ничего сложного для понимания.
0
04.08.2013, 14:09
ac1-caesar
124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 245
04.08.2013, 14:33  [ТС] 5
Да, я понимаю. Весь код большой и неудобочитаемый. Смотрите у меня уже задана переменная книге - Wb. Но в ней весь путь к книге, а нам, как я понимаю необходимо только имя книги? Сам не могу пристроить, поэтому и обратился.
0
The_Prist
1311 / 290 / 65
Регистрация: 13.11.2008
Сообщений: 604
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
ac1-caesar
124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 245
04.08.2013, 15:12  [ТС] 7
Вот это спасибо. Подскажите, что здесь означает цифра 16?


Цитата Сообщение от The_Prist Посмотреть сообщение
Dim wbName As String
wbName = Dir(Wb, 16)
0
The_Prist
1311 / 290 / 65
Регистрация: 13.11.2008
Сообщений: 604
04.08.2013, 15:16 8
У Вас справку VBA за неуплату отключили? :-)
16 - vbDirectory. Выделите Dir и нажмите F1, там все описано.
0
Hugo121
6533 / 2530 / 454
Регистрация: 19.10.2012
Сообщений: 7,598
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
ac1-caesar
124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 245
05.08.2013, 14:30  [ТС] 10
перед процедурой внесения и сохранения данных, нужно убедиться что книга закрыта. И если кто либо эту книгу уже открыл, то должно выскакивать сообщение что книга открыта и выходить из процедуры.
Книга располагается на одном из компьютеров. По локальной сети эту книгу может открыть каждый.
0
Hugo121
6533 / 2530 / 454
Регистрация: 19.10.2012
Сообщений: 7,598
05.08.2013, 14:54 11
Ну значит функция выше годится.
В параметре передавать полный путь к файлу (строку).
0
05.08.2013, 14:54
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2013, 14:54

Не выполняется программа, если переменная задана русскими буквами
И снова здравствуйте. Возник еще вопрос. Для изучения RUby юзаю связку notepad++ + (сорри за...

Как в экселе узнать открыта ли определённая книга?
Подскажите как в экселе узнать открыта ли определённая книга? Private Sub kn1_Click() 'Если...

Как проверить открыта ли БД?
Пока имеется решение (костыль) из серии: лучший способ проверить открыта ли БД - это попытаться с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.