Как в excel проверить есть ли файл в папке

 

TSM

Пользователь

Сообщений: 14
Регистрация: 01.01.1970

Может кто-то знает, как проверить существует файл или нет?  
Проблема такова, автоматом происходит подстановка картинок к строкам с названиями, маркрос ищет название определённой ячейки в выбранной строке и вставляет картинку с аналогичным названием, а что делать, если картинки такой почему-то нет? Как до начала вставки проверить есть она или нет?

Is This the World We Created?

 

Sub Макрос1()  
   If Dir(«C:Picture.jpg») = «» Then  
       MsgBox «Такой картинки нет!», 48, «Ошибка»  
   Else  
       MsgBox «Такая картинка есть!», 64, «Картинка»  
   End If  
End Sub

 

TSM

Пользователь

Сообщений: 14
Регистрация: 01.01.1970

Спасибо, всё работает.  

  Но столкнулся с проблемой, если сервер, на которм лежат фотографии отключен, в этом случае идёт длительная проверка, а потом ошибка. Можно ли также проверять наличие сервера и если он не найден перенаправлять на внутренний диск компа?

Is This the World We Created?

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Sub Check_Disk()  
If Dir(«C:*», vbSystem) <> «» Then  
MsgBox «Диск есть»  
Else: MsgBox «Диска нет»  
End If  
End Sub

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

TSM

Пользователь

Сообщений: 14
Регистрация: 01.01.1970

Не работает корректно. Когда диск подключен, всё OK. Но стоит отключиться от сети и следует длительная проверка, потом выскакивает сообщение    
Run-time error ’52’:    
Bad file name or number  

  Пробовал использовать номер ошибки, но что-то видимо не так делаю. Код ниже:  

  Sub Check_Disk()  
If Dir(«\192.168.1.200c*», vbSystem) <> «» Then  
On Error Resume Next  
If Err.Number = 52 Then  
Err.Clear  
MsgBox «Диска нет»  
Exit Sub  
End If  
MsgBox «Диск есть»  
Else: MsgBox «Диска нет»  
End If  
End Sub

Is This the World We Created?

 

New

Пользователь

Сообщений: 4582
Регистрация: 06.01.2013

Предлагаю такой вариант  

  Sub Check_Disk()  
   On Error Resume Next  
   If Dir(«\192.168.1.200c», vbSystem) <> «» Then  
       If Err = 52 Then  
            Err.Clear  
            MsgBox «Диска нет!», 48, «Ошибка»  
            Exit Sub  
        End If  
       If Err <> 0 Then  
           MsgBox «Произошло ошибка!», 48, «Ошибка»  
           Exit Sub  
       Else  
           On Error GoTo 0  
           MsgBox «Диск есть!», 64, «»  
       End If  
   End If  
End Sub

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Странно…У меня все работает.  
А здесь «If Dir(«\192.168.1.200c*», vbSystem) <> «» Then» после «с» не надо двоеточие ставить?  
If Dir(«\192.168.1.200c:*», vbSystem) <> «» Then

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

New

Пользователь

Сообщений: 4582
Регистрация: 06.01.2013

На самом деле инструкцию On Error Resume Next надо выше поднять на одну строку

 

TSM

Пользователь

Сообщений: 14
Регистрация: 01.01.1970

#9

24.12.2008 19:35:11

Всё заработало! Спасибо всем за участие в решении проблемы.  
Pavel55 — отдельное спасибо.  

  it’s a kind of magic

Is This the World We Created?

Вы можете использовать функцию Dir с параметром vbHidden

Visual Basic
1
2
3
4
5
6
Sub test1()
   Dim fileN As String
 
   fileN = "D:KWReestrIterPara.txt"
   If Dir(fileN, vbHidden) <> "" Then MsgBox fileN & " существует"
End Sub

Это ДОБАВИТ выдачу скрытых файлов к обычным. То есть, если у вас есть файл IterPara.txt и на нем дополнительных атрибутов не стоит, он будет выдан. Если он скрытый — тоже выдан. А если на нем стоит, например, атрибут «системный» и не стоит «скрытый» — не будет. Ну и в случае, если такого файла нет.

Если же надо выдать сообщение тогда и только тогда, когда файл имеет атрибут «скрытый», лучше воспользоваться FSO. Тут перебор файлов в каталоге, но можно и отдельный проверять.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub test2()
   Dim oFSO As Object, oFolder As Object, oFile As Object
 
   Set oFSO = CreateObject("Scripting.FileSystemObject")
   Set oFolder = oFSO.GetFolder("D:KWReestr")
 
   For Each oFile In oFolder.Files
     If oFile.Attributes And 2 Then
         MsgBox oFile.Path & " is Hidden"
     End If
   Next
End Sub

 Как проверить, существует ли файл в определенной папке?

Предположим, у вас есть папка, содержащая несколько файлов, и теперь вы хотите определить, существует ли в этой папке определенный файл из Excel. В этой статье я представлю вам быстрый способ детально проверить, существует ли файл в определенной папке с помощью Excel.

Проверьте, существует ли файл в определенной папке с кодом VBA


стрелка синий правый пузырь Проверьте, существует ли файл в определенной папке с кодом VBA

Чтобы проверить, существует ли файл в определенной папке или нет на листе Excel, вы можете применить следующий код VBA, сделайте следующее:

1. Удерживайте ALT + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.

2. Нажмите Вставить > Модулии вставьте следующий код в окно модуля.

Код VBA: проверьте, существует ли файл в определенной папке:

Sub Test_File_Exist_With_Dir()
'Updateby Extendoffice
    Application.ScreenUpdating = False
    Dim FilePath As String
    FilePath = ""
    On Error Resume Next
    FilePath = Dir("C:UsersDT168DesktopTest folderBook2.xlsx")
    On Error GoTo 0
    If FilePath = "" Then
        MsgBox "File doesn't exist", vbInformation, "Kutools for Excel"
    Else
        MsgBox "File exist", vbInformation, "Kutools for Excel"
    End If
    Application.ScreenUpdating = False
End Sub

Примечание: В приведенном выше коде вы должны изменить путь и имя файла C: Users DT168 Desktop Test folder Book2.xlsx « к вашим потребностям.

3. После вставки кода нажмите F5 ключ для запуска этого кода:

(1.) Если файл существует, вы получите следующий снимок экрана:

документ, если файл существует 1

(2.) Если файл не существует, вы получите следующее предупреждение:

документ, если файл существует 2


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (3)


Оценок пока нет. Оцените первым!

Проверка существования файла в папке.

DKR

Дата: Среда, 28.12.2022, 14:08 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 20


Репутация:

0

±

Замечаний:
0% ±


Добрый день.
Помогите пожалуйста, неожиданно понадобилась следующая функция.

В столбике А находятся номера (формат общий, но скорее всего будет текст). В папке «C:\DOC» находятся файлы с расширением pdf, с такими же названиями, как в столбике А.

Мне нужно, что бы макрос проверял по названиям наличие файлов в папке и если находил, то в столбике Б (напротив названия из столбика А) писал «Есть» и закрашивал ячейку зелёным цветом, если не нашёл файл, то писал «Нет» и закрашивал красным цветом.

Пример:

А Б

23565896 Есть
23578963 Нет
13547765 Нет
65656566 Есть

Очень буду ждать Вашей помощи.

Сообщение отредактировал DKRСреда, 28.12.2022, 14:09

 

Ответить

Nic70y

Дата: Среда, 28.12.2022, 15:03 |
Сообщение № 2

Группа: Друзья

Ранг: Экселист

Сообщений: 8136


Репутация:

1999

±

Замечаний:
0% ±


Excel 2010

[vba]

Код

Function FileYesNo(a As Range)
    If Dir(«C:\DOC» & a & «.pdf») = «» Then
        FileYesNo = «Нет»
    Else
        FileYesNo = «Есть»
    End If
End Function

[/vba]апдэйт: я конечно же не дочитал
[vba]

Код

Sub u_700()
    Application.ScreenUpdating = False
    u = «C:\DOC»
    v = Cells(Rows.Count, «a»).End(xlUp).Row
    For Each w In Range(«a1:a» & v)
        If Dir(u & w & «.pdf») = «» Then
            w.Offset(0, 1) = «Нет»
            w.Offset(0, 1).Interior.Color = 255
        Else
            w.Offset(0, 1) = «Есть»
            w.Offset(0, 1).Interior.Color = 5296274
        End If
    Next
    Application.ScreenUpdating = True
End Sub

[/vba]

К сообщению приложен файл:

5363220.xlsm
(19.8 Kb)


ЮMoney 41001841029809

Сообщение отредактировал Nic70yСреда, 28.12.2022, 15:21

 

Ответить

DKR

Дата: Среда, 28.12.2022, 15:48 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 20


Репутация:

0

±

Замечаний:
0% ±


Гениально! Спасибо Вам огромное. Столько время и нервов мне сэкономили.
Раз уж я тут, есть ещё маленький вопрос :)
Ничего сложного, может уже ест где то в темах.

Например в столбике А попадается одинаковый текст. Можно сделать так, что бы ячейки с одинаковым текстом перекрашивались в красный, автоматически, без кнопки, допустим после каждого ввода происходила проверка ?

Пример
А
132356
165416
132356

Это бы мне тоже очень помогло:)

 

Ответить

_Boroda_

Дата: Среда, 28.12.2022, 15:56 |
Сообщение № 4

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Это называется Условное форматирование
Главная — УФ — Правила выделения ячейки — Повторяющиеся значения
Только не делайте УФ на весь столбец сразу. С запасом — да, но не сильно много, а то подвисать будет

Добавлено
Что-то я прозевал. В правилах что написано? Один вопрос — одна тема. В следующий раз новые вопросы в новых темах задавайте


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Nic70y

Дата: Среда, 28.12.2022, 16:06 |
Сообщение № 5

Группа: Друзья

Ранг: Экселист

Сообщений: 8136


Репутация:

1999

±

Замечаний:
0% ±


Excel 2010

в модуль листа[vba]

Код

Private Sub Worksheet_Change(ByVal Target As Range)
    u = Target.Column
    If u = 1 Then
        a = Target.Value
        b = Target.Row
        c = Application.Match(a, Range(«a1:a» & b — 1))
        If IsNumeric(c) Then Target.Interior.Color = 255
    End If
End Sub

[/vba]апдэйт: опять не дочитал. в этот раз сооб. выше

К сообщению приложен файл:

99.xlsm
(21.3 Kb)


ЮMoney 41001841029809

Сообщение отредактировал Nic70yСреда, 28.12.2022, 16:07

 

Ответить

DKR

Дата: Среда, 28.12.2022, 16:17 |
Сообщение № 6

Группа: Пользователи

Ранг: Новичок

Сообщений: 20


Репутация:

0

±

Замечаний:
0% ±


Что-то я прозевал. В правилах что написано? Один вопрос — одна тема. В следующий раз новые вопросы в новых темах задавайте

Я знал, просто подумал, что вопрос незначительный, мелкий и не заслуживает новой темы.
Но я учту, такого больше не повторится.
Спасибо Вам за Ответ

Сообщение отредактировал DKRСреда, 28.12.2022, 16:29

 

Ответить

Serge_007

Дата: Среда, 28.12.2022, 16:22 |
Сообщение № 7

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

вопрос незначительный, мелкий и не заслуживает новой темы

О значительности вопросов что-то написано в правилах?


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

DKR

Дата: Среда, 28.12.2022, 16:26 |
Сообщение № 8

Группа: Пользователи

Ранг: Новичок

Сообщений: 20


Репутация:

0

±

Замечаний:
0% ±


Супер! Спасибо. Завтра вернусь и нажму на поблагодарить, а то только один раз в 24 часа)

Сообщение отредактировал DKRСреда, 28.12.2022, 16:29

 

Ответить

DKR

Дата: Суббота, 14.01.2023, 14:01 |
Сообщение № 9

Группа: Пользователи

Ранг: Новичок

Сообщений: 20


Репутация:

0

±

Замечаний:
0% ±


апдэйт: опять не дочитал. в этот раз сооб. выше

Здравствуйте.
Столкнулась с проблемой.

Скрипт показывает результат только до определённой строки. И в каждом файле по разному, иногда не доходит 133 до самого конца со значениями в столбике иногда 33. Я пыталась указать как пример range a1:a50000 выдаёт ошибку.
Файлы имеют по 50 тыс. строк. Как сделать, что бы скрипт точно доходил до конца?

 

Ответить

DKR

Дата: Суббота, 14.01.2023, 14:10 |
Сообщение № 10

Группа: Пользователи

Ранг: Новичок

Сообщений: 20


Репутация:

0

±

Замечаний:
0% ±


Решила. Извиняясь. Моя ошибка :facepalm: :shy:

Сообщение отредактировал DKRСуббота, 14.01.2023, 14:11

 

Ответить

Получение списка файлов в указанной папке с помощью кода VBA Excel. Коллекция Files объекта Folder, возвращенного методом FileSystemObject.GetFolder.

Коллекция Files объекта Folder

Для получения списка файлов в указанной папке используется свойство Files объекта Folder. Объект Folder в VBA Excel возвращается методом GetFolder объекта FileSystemObject по полному имени папки в качестве аргумента.

Если в указанной папке нет файлов, применение свойства Folder.Files приведет к возникновению ошибки. Для корректного завершения программы используйте обработчик ошибок или условие, проверяющее наличие файлов в папке.

Получение списка файлов в папке

Пример 1

Код VBA Excel для получения списка файлов в указанной папке и записи полных имен файлов в массив (с поздней привязкой объектов к переменным):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

Sub Primer1()

Dim fso, myPath, myFolder, myFile, myFiles(), i

‘Записываем в переменную myPath полное имя папки

myPath = «C:DATAТекущая папка»

    ‘Создаем новый экземпляр FileSystemObject

    Set fso = CreateObject(«Scripting.FileSystemObject»)

    ‘Присваиваем переменной myFolder ссылку на объект Folder

    Set myFolder = fso.GetFolder(myPath)

    ‘Проверяем, есть ли файлы в папке myFolder

    If myFolder.Files.Count = 0 Then

        MsgBox «В папке «» & myPath & «» файлов нет»

        Exit Sub

    End If

‘Задаем массиву размерность

ReDim myFiles(1 To myFolder.Files.Count)

    ‘Загружаем в массив полные имена файлов

    For Each myFile In myFolder.Files

        i = i + 1

        myFiles(i) = myFile.Path

    Next

‘Просматриваем первый элемент массива

MsgBox myFiles(1)

End Sub

Используемые переменные:

  • fso – ссылка на экземпляр объекта FileSystemObject;
  • myPath – полное имя папки;
  • myFolder – ссылка на объект Folder (папка);
  • myFile – ссылка на один объект File из коллекции myFolder.Files;
  • myFiles() – массив для записи имен файлов;
  • i – счетчик элементов массива.

Пример 2

Получение списка файлов в указанной папке и запись имен файлов в ячейки первого столбца рабочего листа Excel (с ранней привязкой объектов к переменным):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

Sub Primer2()

Dim myPath, myFolder As Folder, myFile As File, i

‘Записываем в переменную myPath полное имя папки

myPath = «C:DATAТекущая папка»

    ‘Создаем новый экземпляр FileSystemObject

    Dim fso As New FileSystemObject

    ‘Присваиваем переменной myFolder ссылку на объект Folder

    Set myFolder = fso.GetFolder(myPath)

    ‘Проверяем, есть ли файлы в папке myFolder

    If myFolder.Files.Count = 0 Then

        MsgBox «В папке «» & myPath & «» файлов нет»

        Exit Sub

    End If

    ‘Записываем имена файлов в первый столбец активного листа

    For Each myFile In myFolder.Files

        i = i + 1

        Cells(i, 1) = myFile.Name

    Next

End Sub

Ранняя привязка позволяет использовать подсказки свойств и методов объектов при написании кода VBA Excel.

Как получить список папок до 3 уровней вложенности, смотрите в статье VBA Excel. Список папок.


Фразы для контекстного поиска: обход файлов.


Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Как в excel проверить есть ли значение одного столбца в другом столбце
  • Как в excel продолжить нумерацию строк
  • Как в excel проверить есть ли значение в диапазоне
  • Как в excel продолжить нумерацию столбца
  • Как в excel проверить две ячейки

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии