Новости:

Форум на данный момент в стадии обновления. Если у Вас возникли проблемы со входом в свою учетную запись - просьба писать на email: info@excel-vba.ru

Главное меню

Длинный путь в строковой переменной

Автор Dmitry_Cheplya, 28.08.2026, 15:02:44

« назад - далее »

Dmitry_Cheplya

Добрый день!
Столкнулся с тем, что программа не работает со строкой длиной более 255 символов. Когда речь идет о просто тексте - вопрос решаемый, но когда переменная представляет собой путь к файлу, появляется проблема.
Так и у меня сейчас произошло. Я не являюсь админом этого ресурса и перемещать файлы я не могу, приходится работать с длинным путем. Сам код работает корректно (проверил в "песочнице" на коротком пути). Ниже приведена часть кода: перебор файлов циклом до совпадения имени файла с маской; как нашелся файл, открываем его с выходом из цикла. Закомментрено имя файла, которое соответствует маске - в сумме получается около 270 символов.

paspath = "\\192.168.0.114\PKFSPro\СНАРК проекты\ОТДЕЛ ПРОЕКТИРОВАНИЯ\03-ГРП\01-БЕЗУГЛАЯ\01-ОБЪЕКТЫ\01-2024\04-Санкт-Петербург\01-КШС\17-Рабочая документация\04-УТВЕРЖДЕНО\2. ЭВ\2 этап\Актуальные спецификации 2 этап 07.07.26 (не передано, не согласовано БНС)\"

'pasfile = "КШС-ДПП01-2.2.1-КС.ЭВ.СО 07.07.2026 (1).docx"

pasfile = Dir(paspath)

        Set myDocument = Nothing
       
        Do Until pasfile = ""
            If pasfile Like "*" & Cells(11, 6).Value & "*" & ".docx" Then
                Set myDocument = myWord.Documents.Open(paspath & pasfile)
                Exit Do
            End If
            pasfile = Dir
        Loop

Я находил информацию, что обойти такую проблему можно с помощью префикса в имени переменной "\\?\" - поставить в начало переменной префикс и все будет хорошо. Как я не пробовал его применить, не получалось корректно отработать.

Как обойти ограничение по длине строковой переменной в 255 символов, если переменная является путем? Есть корректное решение для вопроса?

Дмитрий Щербаков(The_Prist)

#1
Dir не работает с такими путями - можно попробовать обойти через FSO(хотя и у него есть тоже ограничение в 260 символов). Пример перебора файлов при помощи FSO есть здесь: Все файлы включая подпапки
Цитата: Dmitry_Cheplya от 28.08.2026, 15:02:44находил информацию, что обойти такую проблему можно с помощью префикса в имени переменной "\\?\" - поставить в начало переменной префикс и все будет хорошо
это работает только начиная с Ecxel 2016 и Windows 10.
Самый оптимальный вариант, скорее всего - выгружать путь к текстовый файл через командную строку и считывать уже оттуда. Но перед этим убедиться, что сам Excel способен открывать такие файлы. Проверить просто: Файл -Открыть - вставляете полный длинный путь к файлу. Если не работает стандартно - подставляете в самом начале \\?\
Еще можно попробовать создавать символические ссылки на одну из верхнеуровневых папок и обращаться к ней. Если это не запрещено на уровне ОС, конечно.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Яндекс.Метрика Рейтинг@Mail.ru