2017-02-27 23 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 血清 トロープI 54 mg/dL H * REf。コメント:医師からの患者の詳細情報とメモは、ここに と表示され、非常に柔軟性があります... その他の臨床情報など _________________________________________________________________________ | ____ |腎臓:60-100クリティカル50-399 姓名、最初の患者番号ユニットANC 1234 2/23/2017 15:56 FECES FIT POSITIVE H * REf。コメント:医師からの患者の詳細情報とメモは、ここに と表示され、非常に柔軟性があります。 その他の臨床情報など _________________________________________________________________________ | ____ |腎臓:NEGは "NEG" - "60-100クリティカル:

特定の値、たとえば患者記録のANCまたはFITが見つかった場合は、印刷されたレポートを確認するときにこれらの記録をスキップできます。ですから、アンダースコアのチェックボックスを| SKIP |に置き換えたいと思います。

私はこれを次のループのために簡単に行うことができますが、問題は、特定のレポートに表示される "ARTERIAL BLOOD"または "ANC"または "FECES FIT"がどれだけ多いか分かりません。だから、私はFor NextループをDo While Selection.Find.Execute = Trueステートメントに置き換える方法を見つけようとしています。

しかし、多くのバリエーションを試して、正しい構文を得ることはできません。 ご協力いただければ幸いです!場合

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

のための私の作業ですこれは、あなたが必要な正確に何ではありませんが、一例は、うまくいけば、正しい軌道に乗ってあなたを設定します他の誰かがこのようなことをする必要があります... 他人からの入力と助けをありがとう!! =解決方法== = = = = = サブテスト( )バリアントとしての暗黙の文字列 各vtextの配列( "動体"、 "ANC"、 "フィット"、 "前の") 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 End Subの迅速な対応のための

+0

感謝!!私はペーストの版でコードを試しましたが、システムは "Set result = .Execute(FindText:= value)"行で停止します。助けに感謝します。 – KenGooch

0

このコードは動作します:ここで

は、次のループ

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