Новости:

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

Главное меню

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

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

Дмитрий, ссори, не догадался. Вы абсолютно правы с критикой. Учту. За подмогу - низкий поклон. Погоняю чуть позже, сейчас запара. Здравия от души!
#5
Цитата: 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.
#6
Вопросы по Word и VBA / Re: Открыть текстовой файл, уд...
Последний ответ от Sammus - 09.04.2026, 15:24:00
Проблема с цифрами. Что-то похожее с SRT видел. Но там пользовали Excel IsNumeric
#7
Вопросы по 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
мчсмолчсмочсмлочлосмр

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

#8
Добрый всем. Заказ на доработку VBA. Есть программный файл, в него надо дописать создание 2 реестра (регистров) 2-х типов документов (в формате excel and pdf), взаимосвязь между ними в одном документе ссылка на второй документ, валидации данных и после автозаполнение этих файлов. Срок - срочно. Оплата - 30тыс.
#9
А у Вас переменная wdSaveChanges объявлена в коде? Если нет - то она равна 0, что для метода Close будет равносильно False. В Вашем случае, полагаю, это неважно - т.к. прямо перед этим идет SaveAs. Но на будущее учитывайте это.
#10
Мало ли кому-то будет интересно, чем закончилось и какой вариант рабочий
Set myWord = CreateObject("Word.Application")
....
myWord.Documents("Паспорт " & "Опоры.docx").Close SaveChanges:=wdSaveChanges
При таком варианте файл благополучно закрылся, но само приложение Word осталось открытым. Его закрывать нужно в случае необходимости отдельной командой {переменная с объектом "Word.Application"}.Quit
Яндекс.Метрика Рейтинг@Mail.ru