Новости:

Название темы должно отражать суть задачи.
Темы типа "ПОМОГИТЕ!!!", "Срочно!" и т.п. будут удаляться без объяснения причин

Главное меню

Последние сообщения

#1
Dir не работает с такими путями - можно попробовать обойти через FSO(хотя и у него есть тоже ограничение в 260 символов). Пример перебора файлов при помощи FSO есть здесь: Все файлы включая подпапки
Цитата: Dmitry_Cheplya от 28.08.2026, 15:02:44находил информацию, что обойти такую проблему можно с помощью префикса в имени переменной "\\?\" - поставить в начало переменной префикс и все будет хорошо
это работает только начиная с Ecxel 2016 и Windows 10.
Самый оптимальный вариант, скорее всего - выгружать путь к текстовый файл через командную строку и считывать уже оттуда. Но перед этим убедиться, что сам Excel способен открывать такие файлы. Проверить просто: Файл -Открыть - вставляете полный длинный путь к файлу. Если не работает стандартно - подставляете в самом начале \\?\
Еще можно попробовать создавать символические ссылки на одну из верхнеуровневых папок и обращаться к ней. Если это не запрещено на уровне ОС, конечно.
#2
Добрый день!
Столкнулся с тем, что программа не работает со строкой длиной более 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 символов, если переменная является путем? Есть корректное решение для вопроса?
#3
Вопросы по Word и VBA / Re: Открыть текстовой файл, уд...
Последний ответ от Sammus - 11.04.2026, 20:35:24
Дмитрий, класс, заработало!
Про каретку надо изучить. Не знал.
Нашел Ваш совет на эту тему:
"Есть нюансы. Не всегда применяются именно эти разделители. Могут быть и vbCrLf(в Excel он чаще применяется) и оба отдельно. Плюс есть еще и вордовский Crh(13). В общем нет универсального - все зависит от данных. Можете свою функцию написать, которая все возможные(известные Вам) переносы будет заменять символом Chr(10). Это будет надежно и после сможете и Split использовать и все остальное."
Спасибо и здравия от души!
#4
Цитата: Sammus от 10.04.2026, 22:52:53Что-то не работает.
логично. Это потому, что файлы сразу не выкладываете и помогающим надо все самим выдумывать.
У Вас разделитель на строки не vbCrLF, а vbLF. Это значит, что в этой строке:
objTxtFile.LineSeparator = -1надо "-1" заменить на 10. Тогда все заработает.
#5
Вопросы по Word и VBA / Re: Открыть текстовой файл, уд...
Последний ответ от Sammus - 10.04.2026, 22:52:53
Что-то не работает.
Пробежался по коду бегло. Метода - достойная. Буду потом разбирать - штудировать. Я еще новичок.
PS
Во вложении-исходники и желаемый результат.
#6
Вопросы по Word и VBA / Re: Открыть текстовой файл, уд...
Последний ответ от Sammus - 10.04.2026, 20:58:49
Цитата: Дмитрий Щербаков(The_Prist) от 10.04.2026, 13:15:58Не очень понимаю такой лени, честно.

Дмитрий, ссори, не догадался. Вы абсолютно правы с критикой. Учту. За подмогу - низкий поклон. Погоняю чуть позже, сейчас запара. Здравия от души!
#7
Цитата: Sammus от 09.04.2026, 04:25:39Заранее благодарю
эм...Ну очень странно выглядит "просьба"...
По сути Вы предлагаете, чтобы желающие помочь самостоятельно создали все примеры файлов .str, заполнили их, сохранили в нужной кодировке, потом написали с нуля код обработки и выложили? Ну честно - это прямо ТЗ, а не просьба помочь.
Почему сами ничего не попытались сделать? Насколько помню - VBA Вы не первый раз видите. Перебор файлов сделать не сложно. Остальное гуглится. Не очень понимаю такой лени, честно. Или Вы забыли что-то еще выложить(кусочек кода, например :) )
Цитата: Sammus от 09.04.2026, 15:24:00Проблема с цифрами. Что-то похожее с SRT видел. Но там пользовали Excel IsNumeric
в VBA тоже это есть. Поэтому все равно не понимаю сложностей.
Код не самый сложный - разве что с чтением UTF-8 у VBA есть небольшие проблемы. Но они решаемы:
Sub ConvertUTF8SrtToRTF()
    Dim x
    Dim objTxtFile As Object
    Dim sNewText$, sNewFN$, st$, lf&
    Dim oDoc As Document
    Dim IsAdd As Boolean
    'диалог выбора текстовых файлов. Подробнее:
    '   https://www.excel-vba.ru/chto-umeet-excel/dialogovoe-okno-vybora-fajlovpapki/
    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = True
        .Title = "Выбрать файлы srt"
        .Filters.Clear
        .Filters.Add "SRT files", "*.srt*", 1
        .FilterIndex = 1
        .InitialFileName = ActiveDocument.Path
        .InitialView = msoFileDialogViewDetails
        If .Show = 0 Then Exit Sub
        For lf = 1 To .SelectedItems.Count
            x = .SelectedItems(lf) '
            sNewFN = Replace(x, ".srt", ".") & "rtf"
            sNewText = Empty
            Set objTxtFile = CreateObject("ADODB.Stream")
            objTxtFile.Type = 2
            objTxtFile.Charset = "utf-8"
            objTxtFile.LineSeparator = -1
            objTxtFile.Open
            objTxtFile.LoadFromFile x
            objTxtFile.Position = 0
            Do Until objTxtFile.EOS
                st = objTxtFile.ReadText(-2)
                IsAdd = True
                If Len(st) = 0 Then
                    IsAdd = False
                End If
                If IsNumeric(st) Then
                    IsAdd = False
                End If
                If InStr(1, st, "-->", 1) > 0 Then
                    IsAdd = False
                End If
                If IsAdd Then
                    If Len(sNewText) Then
                        sNewText = sNewText & chr(13) & st
                    Else
                        sNewText = st
                    End If
                End If
            Loop
            'закрываем текстовый файл
            objTxtFile.Close
            'создаем новый файл rtf
            Set oDoc = Application.Documents.Add
            oDoc.Range.Text = sNewText
            oDoc.SaveAs2 sNewFN, wdFormatRTF
            oDoc.Close 0
        Next
    End With
    Set objTxtFile = Nothing
    MsgBox "Данные всех файлов обработаны", vbInformation, "www.excel-vba.ru"
End Sub
с плюшками вроде отключения обновления экрана и т.п. уже сами.
Код размещается в любом документе Word.
#8
Вопросы по Word и VBA / Re: Открыть текстовой файл, уд...
Последний ответ от Sammus - 09.04.2026, 15:24:00
Проблема с цифрами. Что-то похожее с SRT видел. Но там пользовали Excel IsNumeric
#9
Вопросы по Word и VBA / Открыть текстовой файл, удалит...
Последний ответ от Sammus - 09.04.2026, 04:25:39
Есть группа стандартных файлов субтитров *.srt.
Язык может быть любой. Кодировка UTF-8.
Задача.
Выбираем их в папке.
Поочередно открывает, удаляем:
- пустые строки,
- строки только из чисел,
- строки, содержащие " --> ",
Оставляем только строки с текстом.
Сохраняем как *.rtf

Пример файла:
1
00:00:00,480 --> 00:00:04,200
мчсмолчсмочсмлочлосмр

2
00:00:02,240 --> 00:00:05,799
мчсмолчсмочсмлочлосмр

3
00:00:04,200 --> 00:00:07,799
мчсмолчсмочсмлочлосмр

Заранее благодарю

#10
Добрый всем. Заказ на доработку VBA. Есть программный файл, в него надо дописать создание 2 реестра (регистров) 2-х типов документов (в формате excel and pdf), взаимосвязь между ними в одном документе ссылка на второй документ, валидации данных и после автозаполнение этих файлов. Срок - срочно. Оплата - 30тыс.
Яндекс.Метрика Рейтинг@Mail.ru