Devust
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Почему, вон код, вверху. Ага, это мне пригодится. Но дело в том, что меняются все такие нижние и верхние индексы, которых я и не трогал. вот в этом месте, когда условия совпали для замены If yes_zamena Then ActiveDocument.Sentences(i) = Mid(ActiveDocument.Sentences(i),1,j-1)+ _ sr + Mid(ActiveDocument.Sentences(i), j + Len(s_split(0))) Тут j - номер символа с которого начинается набор букв, подлежащих замене ActiveDocument.Sentences(i) - текущая строка документа возвращает строку до заменяемых символов sr - новая подстрока Len(s_split(0)) - длина новой подстроки Ну да, ищу и заменяю без учёта chrW. Как же это можно учесть? Вот например: Слово1 слово2, слово3 X2 - Y2, слово4 слово5 H2O. Заменить нужно Y2 на A3, где X2 - икс в квадрате, Y2 - Y в квадрате, А3 - А в кубе, H2O - соответственно АШ2О ))) И ещё, попробовал использовать chrW (sr = string1 + chrW + string2) - бейсик ругнулся: Argument not optional. Если для большего понимания моей проблемки нужен более полный код программки, то куда его можно поместить - сюда? Там немного, 100 строк, примерно. Добавлено: Может я вообще копаюсь не там. Вдруг всё проще, чем я намутил всё? Структурная карта для отражающих горизонтов Г, М, НБС2, НАС7-8, НАС9-10, НАС11-12, НБС1, НБС7, НБС7-6, НБС4, НБС10, Б, Абалак, Т, Т1, Т2, Т3, А, рассчитанных c использованием регрессивной зависимости Здесь цифры и цифры с тирешками - все внизу Заменить нужно некоторые из них НБС1 на НАС91, где 9 внизу, а 1 вверху НБС7 на НАС10-112, где 10-11 внизу, а 2 вверху Придумал сначала заменить "БС1" на "АС---9+++1", а потом "---9" на "9" в нижнем регистре, а "+++1" на "1" в верхнем Ну и также для БС7 Всё заменяется, всё хорошо, но регистры в текущем предложении сбрасываются при замене "БС1" на "АС---9+++1". Добавлено: Public Sub zamena_po_predl() Dim s, sr As String Dim i, j, l, k As Integer Dim s_split() As String Dim yes_instr, yes_zamena As Boolean Open "D:\plast112test.txt" For Input As #1 While Not EOF(1) Input #1, s If s <> "" Then s = Trim(s): s_split() = Split(s): j = -1: l = UBound(s_split) For i = 0 To l If s_split(i) <> "" Then j = j + 1: s_split(j) = s_split(i) End If Next ReDim Preserve s_split(j) l = UBound(s_split) If l < 3 Then sr = s_split(1) + "---" + s_split(2) Else sr = s_split(1) + "---" + s_split(2) + "+++" + s_split(3) End If For i = 1 To ActiveDocument.Sentences.Count yes_instr = True: k = 1 Do While yes_instr j = InStr(k, ActiveDocument.Sentences(i), s_split(0)) If j <> 0 Then yes_zamena = False If j + Len(s_split(0)) + 1 = Len(ActiveDocument.Sentences(i)) Then yes_zamena = True Else If (ActiveDocument.Sentences(i).Characters(j + Len(s_split(0))) = ",") Or (ActiveDocument.Sentences(i).Characters(j + Len(s_split(0))) = " ") Then yes_zamena = True End If End If If yes_zamena Then ActiveDocument.Sentences(i) = Mid(ActiveDocument.Sentences(i), 1, j - 1) & sr & Mid(ActiveDocument.Sentences(i), j + Len(s_split(0))) k = j + Len(sr) Else k = j + Len(s_split(0)) End If If k + 2 > Len(ActiveDocument.Sentences(i)) Then yes_instr = False End If Else yes_instr = False End If Loop Next '-------------------------- Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "---" + s_split(2) .Replacement.Text = s_split(2) .Replacement.Font.Subscript = True .Replacement.Font.Superscript = False .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = True .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Selection.Find.Execute Replace:=wdReplaceAll If l > 2 Then Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "+++" + s_split(3) .Replacement.Text = s_split(3) .Replacement.Font.Superscript = True .Replacement.Font.Subscript = False .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = True .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Selection.Find.Execute Replace:=wdReplaceAll End If End If Wend Close #1 End Sub |