2017-02-27 657 views
-2

我有一个报告,可以是从5到数百页,提供基于实验室测试的患者信息的任何地方。每个患者记录最后用复选框分隔下划线。 “___________ | ____ |”例如:vba do while循环中的多个条件

姓氏,第一个患者数量单位ANC 02 #### 2/23/2017 15:56 BLOOD GLU-ANC 416 mg/dL H * REf。反应:60-100临界50-399 评论:患者的详细信息和医生的笔记在这里显示 ,并且可以非常灵活... 更多临床信息等 _________________________________________________________________________ | ____ | 姓氏,第一个患者编号单位CH 1234 2/23/2017 15:56 SERUM TROP I 54 mg/dL H * REf。反应:60-100临界50-399 评论:患者的详细信息和医生的笔记在这里显示 ,并且可以非常灵活... 更多临床信息等 _________________________________________________________________________ | ____ | 姓氏,第一个患者数量单位ANC 1234 2/23/2017 15:56 FECES FIT正性H * REf。范围:“NEG” - “” 60-100关键:报告 点评:从医生与患者的详细信息和注意事项显示 这里可以非常灵活...... 更多临床信息等 _________________________________________________________________________ | ____ |

如果我在患者记录中找到某个值(例如ANC或FIT),则可以在查看打印报告时跳过这些记录。所以我想用| SKIP |替换下划线复选框。

我可以很容易地做到这一点,为下一个循环,但问题是我不知道有多少“动脉血液”或“ANC”或“FECES FIT”,将出现在给定的报告。所以我一直试图弄清楚如何用Do While Selection.Find.Execute = True语句替换我的For Next循环。

但尝试了很多变化,无法获得正确的语法。 任何帮助将不胜感激!

这是我的工作Next循环

Sub xSimplefind() 
Dim vtext As String 
    vtext = InputBox("Text to find") 'Here I enter 1st search value ie. "ANC" 
    For i = 1 To 7 
    With Selection.Find 
    .Execute FindText:=vtext 
    Selection.MoveRight Unit:=wdCharacter, Count:=1 
End With 
'Once I find that first item, I then look for the very next "|_____|" 
    With Selection.Find 
    .Execute FindText:="|____|" 'TypeText overwrites Selected text. 
    Selection.TypeText Text:="|SKIP|" 
End With 
Next i 
End Sub 

回答

0

这不正是你所需要的,但一个例子希望设置你在正确的轨道上:

Option Explicit 

Sub MultiFind() 
    Dim valueToSkip() As String 
    valueToSkip = Split("ANC,FIT,ARTERIAL BLOOD,FECES FIT", Delimiter:=",") 

    Dim found As Boolean 
    Dim value As Variant 
    Dim result As Variant 

    found = False 
    For Each value In valueToSkip 
     With Selection.Find 
      Set result = .Execute(FindText:=value) 
      If Not result Is Nothing Then 
       found = True 
       Exit For 
      End If 
     End With 
    Next value 

    If found Then 
     '--- add |SKIP| here 
    End If 

End Sub 
+0

感谢您的快速响应!!我尝试了我的粘贴版本的代码,但是系统在“Set result = .Execute(FindText:= value)”行停止,我尝试了许多变化,似乎无法通过该点。帮助将不胜感激。 – KenGooch

0

此代码的工作,如果任何人都需要做这样的事情...... 感谢您的帮助和输入!子测试() Dim vtext As Variant 对于数组中的每个vtext(“动脉”,“ANC”,“FIT”,“PREVIOUS”)) Selection.HomeKey单位:= wdStory

 ' 
    'Inner loop to check every line 
    ' 
    While True 
     Selection.Find.ClearFormatting 
     Selection.Find.Replacement.ClearFormatting 
     With Selection.Find 
      .Text = vtext 
      .Replacement.Text = "" 
      .Forward = True 
      .Wrap = wdFindContinue 
      .Format = False 
      .MatchCase = False 
      .MatchWholeWord = False 
      .MatchWildcards = False 
      .MatchSoundsLike = False 
      .MatchAllWordForms = False 
     End With 
     Selection.Find.Execute 
     With Selection.Find 
      .Text = "|" 
      .Replacement.Text = "" 
      .Forward = True 
      .Wrap = wdFindContinue 
      .Format = False 
      .MatchCase = False 
      .MatchWholeWord = False 
      .MatchWildcards = False 
      .MatchSoundsLike = False 
      .MatchAllWordForms = False 
     End With 
     Selection.Find.Execute 
     Selection.MoveRight Unit:=wdCharacter, Count:=5, Extend:=wdExtend 
     If Selection.Text <> "|SKIP|" Then 
      Selection.Text = "|SKIP|" 
     Else 
      GoTo DoNextWord 
     End If 
    Wend 

DoNextWord: 接着vtext 结束子