Word VBA - Documents.Open FileName не работает - PullRequest
0 голосов
/ 05 июля 2018

У меня есть этот код (этот код является частью большого стека, но это явно то, что не работает.

Sub clearup()

Documents.Open FileName:="D:\test"

End Sub

тест - это файл .doc. Я знаю test.doc там, где я его создал, чтобы быть там, где он есть. Но если я запускаю макрос, я получаю «Извините, мы не смогли найти ваш файл. Был ли он перемещен, переименован или удален?». Я также пытался изменить имя на test.doc безрезультатно. Есть идеи, что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

Я выяснил проблему, первая часть проблемы заключалась в том, что я не использовал окончание .docx (я не заметил, так как у документа не было окончания после его имени), очень в соответствии с предложением из AJD и что также сбило меня с толку, было то, что документ открылся, но я не заметил, поэтому я начал получать ошибку неверного имени, не зная, почему.

Спасибо за ваши предложения.

0 голосов
/ 03 августа 2018

Это обсуждение для тех, кто пишет макросы, использующие 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, это может быть для файлов, имеющих разрешенные специальные символы. У меня нет времени на дальнейшее расследование.

0 голосов
/ 05 июля 2018

Вам просто нужно указать полное имя файла с расширением.

Sub clearup()

Documents.Open FileName:="D:\test.doc"

End Sub

Возможно, вам придется предоставить разрешения, но затем он должен открыться.

Обновлено

Чтобы помочь в отладке проблемы, вы можете взглянуть на дополнительные параметры, которые принимает метод Documents.Open .

Например, чтобы использовать параметр OpenAndRepair:

Documents.Open FileName:="D:\test.doc", OpenAndRepair:=True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...