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

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

04.08.2013, 11:57. Показов 11462. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.08.2013, 11:57
Ответы с готовыми решениями:

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

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

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

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


Цитата Сообщение от The_Prist Посмотреть сообщение
Dim wbName As String
wbName = Dir(Wb, 16)
0
2044 / 475 / 132
Регистрация: 13.11.2008
Сообщений: 909
04.08.2013, 15:16
У Вас справку VBA за неуплату отключили? :-)
16 - vbDirectory. Выделите Dir и нажмите F1, там все описано.
0
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
04.08.2013, 15:51
Вот это - "открыта ли она уже" не разъясните подробнее?
Ну а пока такой код (для "если она уже кем то открыта"):

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  [ТС]
перед процедурой внесения и сохранения данных, нужно убедиться что книга закрыта. И если кто либо эту книгу уже открыл, то должно выскакивать сообщение что книга открыта и выходить из процедуры.
Книга располагается на одном из компьютеров. По локальной сети эту книгу может открыть каждый.
0
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
05.08.2013, 14:54
Ну значит функция выше годится.
В параметре передавать полный путь к файлу (строку).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.08.2013, 14:54
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru