Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/57: Рейтинг темы: голосов - 57, средняя оценка - 4.98
124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 249
1

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

04.08.2013, 11:57. Показов 10991. Ответов 10
Метки нет (Все метки)

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


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
1569 / 368 / 103
Регистрация: 13.11.2008
Сообщений: 769
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
1569 / 368 / 103
Регистрация: 13.11.2008
Сообщений: 769
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
1569 / 368 / 103
Регистрация: 13.11.2008
Сообщений: 769
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
1569 / 368 / 103
Регистрация: 13.11.2008
Сообщений: 769
04.08.2013, 15:16 8
У Вас справку VBA за неуплату отключили? :-)
16 - vbDirectory. Выделите Dir и нажмите F1, там все описано.
0
6930 / 2838 / 545
Регистрация: 19.10.2012
Сообщений: 8,670
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
6930 / 2838 / 545
Регистрация: 19.10.2012
Сообщений: 8,670
05.08.2013, 14:54 11
Ну значит функция выше годится.
В параметре передавать полный путь к файлу (строку).
0
05.08.2013, 14:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.08.2013, 14:54
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru