Функція VBA DIR - просте пояснення з прикладами

VBA має кілька корисних функцій, які можуть вивести вашу автоматизацію в Excel на новий рівень.

Однією з таких функцій є Функція VBA DIR.

Хоча вона сама по собі може здатися простою функцією, яка виконує одну конкретну справу.

Але коли ви поєднуєте його з деякими іншими корисними елементами мови кодування VBA, ви можете створювати потужні матеріали (розглянуті в прикладах далі в цьому підручнику).

Що робить функція VBA Dir?

Використовуйте функцію VBA DIR, якщо ви хочете отримати назву файлу або папки, використовуючи їх шлях.

Для прикладу, якщо у вас є файл Excel у папці, ви можете скористатися функцією VBA DIR, щоб отримати назву цього файлу Excel (або будь -якого іншого типу файлу).

Що робити, якщо я хочу отримати назви всіх файлів Excel у папці (або всіх файлів - будь то файл Excel чи ні)?

Ви також можете це зробити!

При одноразовому використанні функції DIR вона повертає ім'я першого файлу у папці. Тепер, якщо ви хочете отримати імена другого, третього, четвертого файлів, ви можете знову скористатися функцією DIR (розглянуто пізніше як приклад).

Реж повертає ім'я першого файлу, що відповідає імені шляху. Щоб отримати будь -які додаткові назви файлів, які відповідають імені шляху, зателефонуйте Реж знову без аргументів. Якщо імена файлів більше не збігаються, Реж повертає рядок нульової довжини (“”). Розглянуто у Прикладах 3 та 4 далі в цьому посібнику.

Синтаксис функції VBA DIR

Dir [(шлях [, атрибути])]
  • шлях: Це необов’язковий аргумент. Це може бути ім'я файлу, назва папки або назва каталогу. Якщо ім'я шляху не знайдено, функція VBA DIR повертає рядок нульової довжини ("")
  • атрибути: Це необов’язковий аргумент. Ви можете використовувати цей аргумент, щоб вказати деякі атрибути, і функція DIR поверне імена файлів на основі цих атрибутів. Наприклад, якщо вам потрібен список усіх прихованих файлів або файлів лише для читання (разом із файлами без атрибутів), вам потрібно вказати це в цьому аргументі.

Атрибути, доступні для використання у функції VBA DIR (ви можете використовувати один або кілька з них):

Постійна Цінність Опис
vbНормальний 0 (За замовчуванням) Вказує файли без атрибутів.
vbReadOnly 1 Вказує файли лише для читання на додаток до файлів без атрибутів.
vbHidden 2 Вказує приховані файли на додаток до файлів без атрибутів.
VbSystem 4 Вказує системні файли на додаток до файлів без атрибутів. Недоступно на Macintosh.
vbVolume 8 Вказує етикетку тому; якщо вказано будь -який інший атрибут, vbVolume ігнорується. Недоступно на Macintosh.
vbDirectory 16 Вказує каталоги або папки на додаток до файлів без атрибутів.
vbAlias 64 Вказана назва файлу є псевдонімом. Доступно лише на Macintosh.

Використання символів підстановки з функцією DIR

Якщо ви працюєте з Windows, ви також можете використовувати символи підстановки у функції DIR.

Зверніть увагу, що ви не можете використовувати їх під час роботи з VBA в Macintosh.

Використання символів підстановки може бути корисним, якщо:

  • Ви хочете отримати імена файлів певного типу файлів (наприклад, .XLSX або .PPTX)
  • Якщо у іменах файлів є певний суфікс/префікс, і ви хочете отримати назви цих файлів/папок/каталогів. Наприклад, якщо вам потрібні імена всіх файлів із префіксом 2021-2022, ви можете зробити це за допомогою символів підстановки.

В Excel є три символи підстановки:

  1. * (зірочка) - Він позначає будь -яку кількість символів. Наприклад, 2019* дасть вам імена всіх файлів із префіксом 2021-2022.
  2. ? (знак питання) - Він символізує одного символу. Наприклад, 2021-2022 роки? дасть вам імена всіх файлів, які починаються з 2021-2022 і мають ще один символ у назві (наприклад, 2021-2022A, 2021-2022B, 2021-2022C тощо)

Примітка: Є ще один символ підстановки - тильда (~). Оскільки він не використовується багато, я пропустив його пояснення. Детальніше про це можна прочитати тут, якщо вам цікаво.

Функція VIR DIR - Приклади

Тепер давайте зануримось і побачимо деякі приклади використання функції VBA DIR.

Приклад 1 - Отримання імені файлу з його шляху

Якщо у вас є шлях до файлу, ви можете скористатися функцією DIR, щоб отримати з нього назву файлу.

Наприклад, код нижче повертає ім’я файлу та відображає його у вікні повідомлення.

Sub GetFileNames () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \ Excel File A.xlsx") MsgBox FileName End Sub

У наведеному вище коді використовується змінна "FileName" для збереження імені файлу, що повертається функцією DIR. Потім він використовує вікно повідомлення для відображення назви файлу (як показано нижче).

А що буде, коли файлу не існує?

У цьому випадку функція DIR повертає порожній рядок.

У наведеному нижче коді використовується оператор If Then Else для перевірки наявності файлу чи ні. Якщо файл не існує, він відображає вікно повідомлення з текстом «Файл не існує», інакше - ім'я файлу.

Sub CheckFileExistence () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \ Excel File A.xlsx") If FileName "" Тоді MsgBox Ім'я файлу Інше MsgBox "Файл не існує" Кінець Якщо закінчується Підп

Приклад 2 - Перевірте, чи існує каталог чи ні (і створіть, якщо його немає)

Нижче наведений код перевіряє, чи існує папка "Тест" чи ні.

Вікно повідомлення використовується для відображення повідомлення у випадку, якщо папка існує або коли вона не існує.

Sub CheckDirectory () Dim PathName As String Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (PathName, vbDirectory) Якщо CheckDir "" Тоді MsgBox CheckDir & "існує" Інший MsgBox "Каталог не існує "End If End Sub

Ви можете уточнити цей код, щоб перевірити, чи існує папка чи ні, а якщо її немає, то можна створити VBA за допомогою VBA.

Нижче наведено код, який використовує Функція MkDir створити папку, якщо вона не існує.

Sub CreateDirectory () Dim PathName As String Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (PathName, vbDirectory) If CheckDir "" Тоді MsgBox CheckDir & "папка існує" Інше MkDir PathName MsgBox "Папка створена з назвою" & CheckDir End If End Sub

Приклад 3 - Отримайте імена всіх файлів і папок у каталозі

Якщо ви хочете отримати список усіх назв файлів і папок у каталозі, ви можете скористатися функцією DIR.

У наведеному нижче коді перераховані всі файли та назви папок у тестовій папці (яка знаходиться за таким шляхом - C: \ Users \ sumit \ Desktop \ Test \).

Я використовую Debug.Print для відображення імен у вікні Негайне. Ви також можете використовувати це, щоб перелічити імена у вікні повідомлення або у стовпці в Excel.

Sub GetAllFile & FolderNames () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \", vbDirectory) Do While FileName "" Debug.Print FileName FileName = Dir () Закінчення циклу циклу

Цикл Do While у наведеному вище коді триває до тих пір, поки всі файли та папки на вказаному шляху не будуть охоплені. Коли більше немає файлів/папок для покриття, FileName стає нульовим рядком, і цикл зупиняється.

Приклад 4 - Отримайте імена всіх файлів у папці

Ви можете скористатися наведеним нижче кодом, щоб отримати імена всіх файлів у папці/каталозі (а не імена підпапок).

Sub GetAllFileNames () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \") Do While FileName "" Debug.Print FileName FileName = Dir () Закінчення циклу циклу

Цей код подібний до коду, який використовується у прикладі 3, з однією незначною відмінністю.

У цьому коді я не вказав vbDirectory у функції DIR. Коли ви вказуєте vbDirectory, він видасть вам імена всіх файлів, а також папок.

Якщо ви не вкажете vbDirectory, функція DIR дасть вам лише назви файлів.

Примітка: Якщо ви хочете отримати назви всіх файлів у головній папці та підпапках, ви не можете використовувати функцію DIR (оскільки вона не є рекурсивною). Для цього можна скористатися Power Query (кодування не потрібне), або використати об’єкт файлової системи у VBA (з рекурсією).

Приклад 5 - Отримайте імена всіх підпапок у папці

Наведений нижче код дасть вам назви всіх підпапок у зазначеній папці.

Він використовує Функція GetAtr у VBA, що дозволяє нам перевірити, чи ім’я, яке повертає функція DIR, - це ім’я файлу чи папки/каталогу.

Sub GetSubFolderNames () Dim FileName As String Dim PathName As String PathName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (PathName, vbDirectory) Do While FileName "" If GetAttr (PathName & FileNactory) = vb Налагодження.Надрукувати Ім'я файлу Кінець, якщо Ім'я файлу = Dir () Закінчення циклу суб

Знову ж таки, я використовую Debug.Print, щоб отримати імена у безпосередньому вікні. Ви можете отримати їх у вікні повідомлень або в Excel (відповідно змінивши код).

Приклад 6 - Отримайте перший файл Excel з папки

За допомогою функції DIR ви можете вказати розширення файлу або будь -який суфікс/префікс у назві файлу, який повертається.

У наведеному нижче коді відображатиметься ім’я першого файлу Excel у папці Test.

Sub GetFirstExcelFileName () Dim FileName As String Dim PathName As String PathName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (PathName & "*.xls*") MsgBox Кінець підменю файлу

Зауважте, що я використовував * .xls * (зірочка з обох сторін). Це забезпечить перевірку всіх версій файлів Excel (.xls, xlsx, .xlsm, .xlsb).

Приклад 7 - Отримайте імена всіх файлів Excel у папці

Використовуйте код нижче, щоб отримати назви всіх файлів Excel у папці Test.

Sub GetAllFileNames () Затемнення імені папки як рядка Затемнення імені файлу як рядка Назва папки = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (FolderName & "*.xls*") Do While FileName "" Debug.Print FileName FileName = Dir () Кінець циклу Sub

Хоча функція DIR повертає лише ім’я першого файлу Excel, оскільки ми знову викликаємо його в циклі, вона проходить усі файли і дає нам імена всіх файлів Excel.

Сподіваюся, цей підручник і приклади були вам корисними.

Дайте мені знати ваші думки в розділі коментарів.

wave wave wave wave wave