Чет не получается у меня поиск подстрок. По идее должно выделять найденные подстроки, но не выходит. Вообще нужно найденное выделить цветом и подсчитать количество вхождений. У меня пока даже не ищет. [vba]
Код
Option Explicit
Public Sub findStr() Dim objWrdApp As Object Dim str1 As String Dim objWrdDoc As Object On Error Resume Next ThisWorkbook.VBProject.References.AddFromFile Application.Path & Application.PathSeparator & "MSWORD.OLB" Set objWrdApp = GetObject(, "Word.Application") If objWrdApp Is Nothing Then
Set objWrdApp = CreateObject("Word.Application") Set objWrdDoc = objWrdApp.Documents.Open(ThisWorkbook.Path & "\2.docx") Else Set objWrdDoc = objWrdApp.Documents.Open(ThisWorkbook.Path & "\2.docx") End If str1 = Cells(2, 1).Value objWrdApp.Visible = True objWrdApp.Activate objWrdApp.Selection.Find.ClearFormatting objWrdApp.Selection.Find.Replacement.ClearFormatting With objWrdApp.Selection.Find .Text = str1 ' Ищет в Ворде текст,который нужно. End With
Set objWrdDoc = Nothing Set objWrdApp = Nothing End Sub
[/vba]
Чет не получается у меня поиск подстрок. По идее должно выделять найденные подстроки, но не выходит. Вообще нужно найденное выделить цветом и подсчитать количество вхождений. У меня пока даже не ищет. [vba]
Код
Option Explicit
Public Sub findStr() Dim objWrdApp As Object Dim str1 As String Dim objWrdDoc As Object On Error Resume Next ThisWorkbook.VBProject.References.AddFromFile Application.Path & Application.PathSeparator & "MSWORD.OLB" Set objWrdApp = GetObject(, "Word.Application") If objWrdApp Is Nothing Then
Set objWrdApp = CreateObject("Word.Application") Set objWrdDoc = objWrdApp.Documents.Open(ThisWorkbook.Path & "\2.docx") Else Set objWrdDoc = objWrdApp.Documents.Open(ThisWorkbook.Path & "\2.docx") End If str1 = Cells(2, 1).Value objWrdApp.Visible = True objWrdApp.Activate objWrdApp.Selection.Find.ClearFormatting objWrdApp.Selection.Find.Replacement.ClearFormatting With objWrdApp.Selection.Find .Text = str1 ' Ищет в Ворде текст,который нужно. End With
Set objWrdDoc = Nothing Set objWrdApp = Nothing End Sub
With objWrdApp.Selection.Find .Text = "test" ' Ищет в Ворде текст,который нужно. Do res = .Execute If res Then 'Заливка objWrdApp.Selection.Shading.BackgroundPatternColor = wdColorYellow 'Выделение 'objWrdApp.Selection.Range.HighlightColorIndex = wdRed cnt = cnt + 1 End If Loop While res End With Debug.Print cnt
[/vba]
Udik, вот так получилось: [vba]
Код
With objWrdApp.Selection.Find .Text = "test" ' Ищет в Ворде текст,который нужно. Do res = .Execute If res Then 'Заливка objWrdApp.Selection.Shading.BackgroundPatternColor = wdColorYellow 'Выделение 'objWrdApp.Selection.Range.HighlightColorIndex = wdRed cnt = cnt + 1 End If Loop While res End With Debug.Print cnt
Ага, спасибо, а то у меня излишне длинно получилось [vba]
Код
Option Explicit
Public Sub findStr() Dim objWrdApp As Object Dim str1 As String Dim objWrdDoc As Object Dim i As Long, r As Word.Range
On Error Resume Next ThisWorkbook.VBProject.References.AddFromFile Application.Path & Application.PathSeparator & "MSWORD.OLB" Set objWrdApp = GetObject(, "Word.Application") If objWrdApp Is Nothing Then Set objWrdApp = CreateObject("Word.Application") Set objWrdDoc = objWrdApp.Documents.Open(ThisWorkbook.Path & "\2.docx")
str1 = Cells(2, 1).Value objWrdApp.Visible = True objWrdApp.Activate ' number text Set r = objWrdApp.Selection.Range With r.Duplicate.Find .ClearFormatting Do While .Execute(str1, False, False, Wrap:=wdFindStop) i = i + 1 'количество вхождений Loop End With ' end number text ' выделение цветом objWrdApp.Selection.Find.ClearFormatting objWrdApp.Selection.Find.Replacement.ClearFormatting Options.DefaultHighlightColorIndex = wdRed ' цвет выделения With objWrdApp.Selection.Find .Text = str1 ' Ищет в Ворде текст,который нужно. .Replacement.Text = str1 ' текст для замены .Replacement.Highlight = True .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With objWrdApp.Selection.Find.Execute Replace:=wdReplaceAll
Set objWrdDoc = Nothing Set objWrdApp = Nothing End Sub
[/vba]
Ага, спасибо, а то у меня излишне длинно получилось [vba]
Код
Option Explicit
Public Sub findStr() Dim objWrdApp As Object Dim str1 As String Dim objWrdDoc As Object Dim i As Long, r As Word.Range
On Error Resume Next ThisWorkbook.VBProject.References.AddFromFile Application.Path & Application.PathSeparator & "MSWORD.OLB" Set objWrdApp = GetObject(, "Word.Application") If objWrdApp Is Nothing Then Set objWrdApp = CreateObject("Word.Application") Set objWrdDoc = objWrdApp.Documents.Open(ThisWorkbook.Path & "\2.docx")
str1 = Cells(2, 1).Value objWrdApp.Visible = True objWrdApp.Activate ' number text Set r = objWrdApp.Selection.Range With r.Duplicate.Find .ClearFormatting Do While .Execute(str1, False, False, Wrap:=wdFindStop) i = i + 1 'количество вхождений Loop End With ' end number text ' выделение цветом objWrdApp.Selection.Find.ClearFormatting objWrdApp.Selection.Find.Replacement.ClearFormatting Options.DefaultHighlightColorIndex = wdRed ' цвет выделения With objWrdApp.Selection.Find .Text = str1 ' Ищет в Ворде текст,который нужно. .Replacement.Text = str1 ' текст для замены .Replacement.Highlight = True .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With objWrdApp.Selection.Find.Execute Replace:=wdReplaceAll
Set objWrdDoc = Nothing Set objWrdApp = Nothing End Sub