VBA не может найти файл - PullRequest
       38

VBA не может найти файл

2 голосов
/ 15 ноября 2010

У меня есть сценарий VBA, используемый для обработки документов Word. Первым делом программа создает индекс документов в определенном наборе папок. Затем он обрабатывает список всех проиндексированных документов.

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

Может кто-нибудь пролить свет на то, почему VBA должен отображать это поведение?

Сценарий использует функцию Dir$ для индексации файлов и функцию Documents.Open для открытия каждого текстового документа для обработки.

Пример кода:

ChangeFileOpenDirectory (folderName)
inputFileName = Dir$(folderName & "*.doc")
Do While inputFileName <> ""
    ... call various functions here ...
    inputFileName = Dir$
Loop

Одна из функций, вызываемых в блоке, имеет следующую строку:

Set currentDoc = Documents.Open(fileName:=docFileName, AddToRecentFiles:=False, Visible:=False)

Это точка, в которой код не работает.

Ответы [ 3 ]

0 голосов
/ 16 ноября 2010

Я копирую / вставляю ваш код, и он работает правильно.

Однако все файлы остаются открытыми (и скрытыми), а при запуске его в другом каталоге открываются и добавляются дополнительные файлы в открытые проекты (см. Редактор VBA).

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

Попробуйте добавить

currentdoc.Close

непосредственно перед

inputFileName = Dir$
0 голосов
/ 16 ноября 2010

Несколько причин, некоторые повторяются из других ответов:

  • Если путь + имя файла достаточно длинное ... (вы уже ответили в комментарии)
  • Если вы пишетеновые файлы в том же каталоге, Dir $ может быть поврежден (случилось со мной)
  • Если у вас есть имена файлов с нестандартными символами (например, "#")
  • Файлы заблокированы другими процессами
  • Файлы, удаленные во время работы макроса

Вы также можете попробовать этот код ...

Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(file) Then ....  

Сначала включите справочник Microsoft Scripting в VBE

0 голосов
/ 15 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...