Страницы: 1
RSS
Обработка строки String макросом
 
Здравствуйте!

Подскажите, пожалуйста, по поводу обработки String.

Макрос запускается из Excel, но в переменную txt заносится текст из ворд (там присутствуют абзацы).
Нужно в этой строке удалить все до и после определенных фраз. Например, удалить все до "Фраза1" и после "Фраза2" (Остается то, что между фразами). Сохраняются ли сами фразы неважно.

С языком vba не знакома, не могу понять, как обрабатывать строки.
Были варианты через InStr, но не смогла найти команду, удаляющую относительно позиции

Еще пробовала через split (разделить текст на 2 куска Фразой1, перезаписать txt вторым элементом массива (индекс 1), опять поделить Фразой2 и опять перезаписать txt нулевым элементом. Но что-то не вышло (подозреваю, что перезапись). Не знаю, насколько нормален этот способ)

Спасибо!
 
 
Тяжело, наверное, модераторам... Каждому второму объяснять, что нужен файл примера - это какое терпение надо иметь.
Изменено: Jack_Famous - 29.03.2016 19:18:34
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
AnastasiaSh, Без вашего примера разговор беспочвенен.
 
Код
Sub test()
s = "У попа была собака, он ее любил"
s1 = "была": s2 = "ее"
l1 = InStr(1, s, s1)
l2 = InStr(1, s, s2)
ss = Mid(s, l1 + Len(s1), l2 - l1 - Len(s1))
End Sub
 
Ну уж коль так...
Цитата
AnastasiaSh написал:
Еще пробовала через split
Код
Sub test2()
s = "У попа была собака, он ее любил"
s1 = "была": s2 = "ее"
'l1 = InStr(1, s, s1)
'l2 = InStr(1, s, s2)
ss = split(split(s,s2)(0),s1)(1)
'или, если пробелы в начале и конце мешают:
'ss = trim(split(split(s,s2)(0),s1)(1))
End Sub
Изменено: Михаил С. - 29.03.2016 19:35:22
 
А сплитить нужно именно на два куска - вдруг там таких фраз больше одной?
 
Я бы регуляркой сделал (ну нравятся они мне  :))
Код
Function СЕРЕДКА(Text As String, BegText As String, EndText As String) As String
    Dim Obj As Object
    With CreateObject("VBScript.RegExp")
        .MultiLine = True
        .Global = True
        .Pattern = BegText & " +?(.+?) +?" & EndText
        Set Obj = .Execute(Text)
        If Obj.Count = 0 Then Exit Function
        СЕРЕДКА = Obj(0).submatches(0)
    End With
End Function

Страницы: 1
Наверх