Это обсуждение для тех, кто пишет макросы, использующие VBA с Word, Excel и т. Д., И столкнулся с этой ошибкой при выполнении макроса:
Documents.Open (..)
ошибка 5174 К сожалению, мы не смогли найти ваш файл. Был ли он перемещен, переименован или удален?
(«буква диска: ... \ filename ...»)
Я видел много сообщений об этой ошибке. Существует 2 основных сценария, и самый простой - единственный обсуждаемый.
Сценарий 1
Вы пытаетесь открыть имя «путь \ файл», которое фактически перемещалось между моментом запуска вашей программы и определения значения имени «путь \ файл» и временем, когда она фактически пыталась открыть файл. Это легко исправить.
Сценарий 2
САМОЕ ВАЖНОЕ И ОЧЕНЬ СЛОЖНОЕ, ЧТОБЫ ОБНАРУЖИТЬ
Значение, которое вы используете для обозначения имени «путь \ файл», которое нужно открыть, используя код макроса, например:
Documents.Open (....
... указанное значение содержит непечатаемые символы (я говорю не о буквенно-буквенных символах, таких как "." Или "&, или о недопустимых символах, я говорю о ASCII 13, который, скорее всего, является последним символом в конце значение для вашего имени файла. Но когда вы используете Debug.Print, этот символ не печатается.
Шаги для подтверждения:
Когда вы находитесь в режиме отладки, Debug.Print «значение пути \ файла, который вы пытаетесь открыть».
Это будет печататься, как и ожидалось, без видимых проблем, затем вы можете подтвердить, что файл существует, скопировав напечатанное значение в проводнике Windows, и файл должен открыться автоматически. Если он открывается вручную, то вы, вероятно, имеете дело со сценарием # 2
ПОЭТОМУ
находясь в режиме отладки, используя переменную, которая содержит путь \ значение файла, напишите оператор FOR для итерации по каждому символу строки, используя Debug.Print Asc (<>), где <> - переменная в FOR итерация, которая получает 1 символ из строки path \ file одновременно. Скорее всего, вы увидите, что последний символ будет напечатан как 13
Функция VBA
Trim(....
не решает эту проблему. вам нужно использовать
Replace (...
функция с "Chr (13)" в качестве значения, которое нужно заменить на vbNullString
Есть некоторые хаки, которые заключаются в добавлении ASCII-символа 13 (возврат каретки без платы за строку) к именам файлов, а затем добавлении имени и т. Д.
Существуют утилиты, которые устраняют эти проблемы, может быть, не полностью? ... это может быть причиной.
Другая возможная причина в моем радаре - приглашение DOS, добавляющее дополнительный символ 13 при перенаправлении вывода команды DIR с помощью «>>» в файл для создания списка файлов из команды DIR. Это не происходит для всех файлов в результатах команды DIR, это может быть для файлов, имеющих разрешенные специальные символы. У меня нет времени на дальнейшее расследование.