Коли ви думаєте про автоматичне відкриття робочих книг Excel, подумайте, що може статися, якщо ви спробуєте відкрити книгу, яка вже відкрита. У світі, який не підтримує VBA, Excel намагається відкрити файл знову, з повідомленням, яке попереджає, що всі незбережені зміни буде втрачено. Ви можете захиститися від такого явища, перевіривши, чи даний файл уже відкритий, перш ніж спробувати відкрити його знову.
Уникайте цього попереджувального повідомлення.
Як працює макрос
Перше, що слід звернути увагу на цей макрос, це те, що це функція, а не підпроцедура. Як ви побачите, якщо зробити цей макрос функцією, ви зможете передати йому будь-яке ім’я файлу, щоб перевірити, чи цей файл уже відкритий.
Суть цього коду проста. Ви тестуєте дане ім’я файлу, щоб перевірити, чи можна його призначити змінній Object. Лише відкриті робочі книги можна призначити змінній Object. Коли ви намагаєтеся призначити змінній закриту книгу, виникає помилка.
Якщо дану трудову книжку можна призначити, робоча книга відкрита; якщо виникає помилка, книга закривається.
Функція FileIsOpenTest(TargetWorkbook як рядок) як логічне значення
'Крок 1: Оголошення змінних
Dim TestBook як робочий зошит
«Крок 2. Скажіть Excel відновити роботу через помилку
Помилка Продовжити далі
«Крок 3. Спробуйте призначити цільову книгу TestBook
Встановити TestBook = Workbooks(TargetWorkbook)
«Крок 4: Якщо помилки не сталося, книга вже відкрита
Якщо Err.Number = 0 Тоді
FileIsOpenTest = True
Інакше
FileIsOpenTest = False
Кінець Якщо
Кінцева функція
Перше, що робить макрос, — це оголошувати змінну String, яка міститиме назву файлу, яку вибирає користувач. TestBook — це ім'я вашої змінної String.
На кроці 2 ви повідомляєте Excel, що може виникнути помилка запуску цього коду, і, у разі помилки, відновіть код. Без цього рядка код просто зупинився б, коли виникає помилка. Знову ви перевіряєте дане ім’я файлу, щоб побачити, чи можна його призначити змінній Object. Якщо дану книгу можна призначити, вона відкрита; якщо виникає помилка, вона закривається.
На кроці 3 ви намагаєтеся призначити дану книгу змінній TestBook Object. Робоча книга, яку ви намагаєтеся призначити, — це рядкова змінна під назвою TargetWorkbook. TargetWorkbook передається функції в оголошеннях функцій (див. перший рядок коду). Ця структура усуває необхідність жорсткого кодування імені книги, дозволяючи замість цього передавати його як змінну.
На кроці 4 ви просто перевіряєте, чи не сталася помилка. Якщо помилка не сталася, книга відкрита, тому ви встановлюєте для FileIsOpenTest значення True. Якщо сталася помилка, книга не відкрита, і для параметра FileIsOpenTest встановлено значення False.
Знову ж таки, цю функцію можна використовувати для оцінки будь-якого файлу, який ви йому передаєте, за допомогою його аргументу TargetWorkbook. У цьому і полягає краса введення макросу у функцію.
Наступний макрос демонструє, як реалізувати цю функцію. Тут ви викликаєте нову функцію FileIsOpenTest, щоб переконатися, що користувач не може відкрити вже відкритий файл:
Підмакрос1()
'Крок 1. Визначте рядкову змінну
Dim FName як варіант
Dim FNFileOnly як рядок
«Крок 2: метод GetOpenFilename активує діалогове вікно
FName = Application.GetOpenFilename( _
FileFilter:="Книги Excel,*.xl*", _
Title:="Виберіть книгу для відкриття", _
MultiSelect:=False)
'Крок 3: Відкрийте вибраний файл, якщо він ще не відкритий
Якщо FName <> False Тоді
FNFileOnly = StrReverse(Left(StrReverse(FName), _
InStr(StrReverse(FName), ") - 1))