317 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			317 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
VERSION 5.00
 | 
						|
Begin {C62A69F0-16DC-11CE-9E98-00AA00574A4F} vlnNextROForm 
 | 
						|
   Caption         =   "Find RO"
 | 
						|
   ClientHeight    =   3390
 | 
						|
   ClientLeft      =   45
 | 
						|
   ClientTop       =   345
 | 
						|
   ClientWidth     =   8010
 | 
						|
   OleObjectBlob   =   "vlnNextROForm.frx":0000
 | 
						|
   ShowModal       =   0   'False
 | 
						|
   StartUpPosition =   1  'CenterOwner
 | 
						|
End
 | 
						|
Attribute VB_Name = "vlnNextROForm"
 | 
						|
Attribute VB_GlobalNameSpace = False
 | 
						|
Attribute VB_Creatable = False
 | 
						|
Attribute VB_PredeclaredId = True
 | 
						|
Attribute VB_Exposed = False
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
Option Explicit
 | 
						|
Dim ContinueProcessing As Boolean
 | 
						|
 | 
						|
Private Function GetNextField(fld As Field) As Field
 | 
						|
    Dim fldNext As Field
 | 
						|
    On Error GoTo ehNF
 | 
						|
    Set fldNext = fld.Next
 | 
						|
    While Not fldNext Is Nothing
 | 
						|
        Debug.Print "fldNext " + CStr(fldNext.Index)
 | 
						|
        If (Mid(fldNext.Code.Text, 1, 8) = " QUOTE <") Then
 | 
						|
            Set GetNextField = fldNext
 | 
						|
            Exit Function
 | 
						|
        End If
 | 
						|
        Set fldNext = fldNext.Next
 | 
						|
    Wend
 | 
						|
    Set GetNextField = fldNext
 | 
						|
    Exit Function
 | 
						|
ehNF:
 | 
						|
    Set GetNextField = Nothing
 | 
						|
    Exit Function
 | 
						|
End Function
 | 
						|
Private Function GetPreviousField(fld As Field) As Field
 | 
						|
    Dim fldPrev As Field
 | 
						|
    On Error GoTo ehPF
 | 
						|
    Set fldPrev = fld.Previous
 | 
						|
    While Not fldPrev Is Nothing
 | 
						|
        Debug.Print "fldPrev " + CStr(fldPrev.Index)
 | 
						|
        If (Mid(fldPrev.Code.Text, 1, 8) = " QUOTE <") Then
 | 
						|
            Set GetPreviousField = fldPrev
 | 
						|
            Exit Function
 | 
						|
        End If
 | 
						|
        Set fldPrev = fldPrev.Previous
 | 
						|
    Wend
 | 
						|
    Set GetPreviousField = fldPrev
 | 
						|
    Exit Function
 | 
						|
ehPF:
 | 
						|
    Set GetPreviousField = Nothing
 | 
						|
    Exit Function
 | 
						|
End Function
 | 
						|
Private Function GetNextText(fld As Field) As String
 | 
						|
    Dim fldNext As Field
 | 
						|
    Set fldNext = GetNextField(fld)
 | 
						|
    If fldNext Is Nothing Then
 | 
						|
        GetNextText = ""
 | 
						|
    Else
 | 
						|
        GetNextText = GetRO(fldNext.Code.Text)
 | 
						|
    End If
 | 
						|
End Function
 | 
						|
Private Function GetPreviousText(fld As Field) As String
 | 
						|
    Dim fldPrev As Field
 | 
						|
    Set fldPrev = GetPreviousField(fld)
 | 
						|
    If fldPrev Is Nothing Then
 | 
						|
        GetPreviousText = ""
 | 
						|
    Else
 | 
						|
        GetPreviousText = GetRO(fldPrev.Code.Text)
 | 
						|
    End If
 | 
						|
End Function
 | 
						|
Private Sub btnNext_Click()
 | 
						|
'    MousePointer = fmMousePointerHourGlass
 | 
						|
'    DoEvents
 | 
						|
'    Dim rng As Range
 | 
						|
'    Set rng = Selection.Range
 | 
						|
'    Dim strt As Long
 | 
						|
'    strt = rng.End
 | 
						|
'    rng.MoveEnd wdCharacter, ActiveDocument.Characters.Count
 | 
						|
'    'Debug.Print str(rng.start) & " - " & str(rng.End)
 | 
						|
'    Dim flds As Fields
 | 
						|
'    Set flds = rng.Fields
 | 
						|
'    'Debug.Print str(flds.Count) & " Fields"
 | 
						|
'    Dim fld As Field
 | 
						|
'    For Each fld In flds
 | 
						|
'        Dim txt As String
 | 
						|
'        txt = fld.Code.Text
 | 
						|
'        If (fld.Code.Start > strt And Mid(fld.Code.Text, 1, 8) = " QUOTE <") Then
 | 
						|
'            tbNext.Text = GetNextText(fld)
 | 
						|
'            tbPrevious.Text = GetPreviousText(fld)
 | 
						|
'            Dim myType As String
 | 
						|
'            Dim myRO As String
 | 
						|
'            Dim myTxt As String
 | 
						|
'            myType = GetType(txt)
 | 
						|
'            myRO = GetRO(txt)
 | 
						|
'            myTxt = GetTxt(txt)
 | 
						|
'            If myType = "STP" Then  'setpoint
 | 
						|
'                ProcessField fld, myRO, myTxt, tbPrevious.Text, tbNext.Text
 | 
						|
'    MousePointer = fmMousePointerDefault
 | 
						|
'                Exit Sub
 | 
						|
'            ElseIf myType = "MEL" Then  'equipment
 | 
						|
''                If InStr(myRO, "\n") > 0 And InStr(myRO, myTxt) > 0 Then    'handle only \n for now and only if text is fullname
 | 
						|
'                Dim p As Integer
 | 
						|
'                p = InStr(myRO, "\")
 | 
						|
'                If p > 0 Then
 | 
						|
'                    Dim s As String
 | 
						|
'                    s = UCase(Mid(myRO, p + 1, 1))
 | 
						|
'                    If InStr("NRD", s) > 0 Then
 | 
						|
'                        ProcessField fld, myRO, myTxt, tbPrevious.Text, tbNext.Text
 | 
						|
'                        MousePointer = fmMousePointerDefault
 | 
						|
'                        Exit Sub
 | 
						|
'                    End If
 | 
						|
'                End If
 | 
						|
''                If InStr(myRO, "\n") > 0 Then    'handle \n name (short or full)
 | 
						|
''                    ProcessField fld, myRO, myTxt, tbPrevious.Text, tbNext.Text
 | 
						|
''    MousePointer = fmMousePointerDefault
 | 
						|
''                    Exit Sub
 | 
						|
''                End If
 | 
						|
''                If InStr(myRO, "\r") > 0 Then    'handle \r room
 | 
						|
''                    ProcessField fld, myRO, myTxt, tbPrevious.Text, tbNext.Text
 | 
						|
''    MousePointer = fmMousePointerDefault
 | 
						|
''                    Exit Sub
 | 
						|
''                End If
 | 
						|
''                If InStr(myRO, "\d") > 0 Then    'handle \d description
 | 
						|
''                    ProcessField fld, myRO, myTxt, tbPrevious.Text, tbNext.Text
 | 
						|
''    MousePointer = fmMousePointerDefault
 | 
						|
''                    Exit Sub
 | 
						|
''                End If
 | 
						|
'            ElseIf myType = "ARP" Then  'alarm
 | 
						|
'                ProcessField fld, myRO, myTxt, tbPrevious.Text, tbNext.Text
 | 
						|
'    MousePointer = fmMousePointerDefault
 | 
						|
'                Exit Sub
 | 
						|
'            End If
 | 
						|
'        End If
 | 
						|
'    Next
 | 
						|
'    tbRO.Text = ""
 | 
						|
'    tbText.Text = ""
 | 
						|
'    Beep
 | 
						|
'    MousePointer = fmMousePointerDefault
 | 
						|
End Sub
 | 
						|
Sub ProcessField(fld As Field, ro As String, txt As String, roPrev As String, roNext As String)
 | 
						|
    fld.Select
 | 
						|
    ActiveWindow.ScrollIntoView Selection.Range, True
 | 
						|
    Dim clipboard As MSForms.DataObject
 | 
						|
    Set clipboard = New MSForms.DataObject
 | 
						|
    Dim roText As String
 | 
						|
    If Left(ro, 4) = "<ARP" Then
 | 
						|
        roText = GetARPRO(ro, roPrev, roNext)
 | 
						|
    Else
 | 
						|
        roText = ro
 | 
						|
    End If
 | 
						|
    tbRO.Text = roText
 | 
						|
    tbText.Text = txt
 | 
						|
    clipboard.SetText tbRO.Text
 | 
						|
    clipboard.PutInClipboard
 | 
						|
End Sub
 | 
						|
Function GetARPRO(ro As String, roPrev As String, roNext As String) As String
 | 
						|
'<ARP CDS-LT046-MED \n\H>
 | 
						|
'<MEL FWS-PL-V037 \d>
 | 
						|
'<ARP CDS-LT046-MED \t\h\1>
 | 
						|
    Dim roNum As String
 | 
						|
    Dim roFlag As String
 | 
						|
    roNum = Trim(Left(ro, InStr(ro, "\") - 1))
 | 
						|
    roFlag = Trim(Mid(ro, InStr(ro, "\")))
 | 
						|
    Dim roPNum As String
 | 
						|
    Dim roPFlag As String
 | 
						|
    If roPrev = "" Then
 | 
						|
        roPNum = roPrev
 | 
						|
        roPFlag = roPrev
 | 
						|
    Else
 | 
						|
        roPNum = Trim(Left(roPrev, InStr(roPrev, "\") - 1))
 | 
						|
        roPFlag = Trim(Mid(roPrev, InStr(roPrev, "\")))
 | 
						|
    End If
 | 
						|
    Dim roNNum As String
 | 
						|
    Dim roNFlag As String
 | 
						|
    If roNext = "" Then
 | 
						|
        roNNum = roNext
 | 
						|
        roNFlag = roNext
 | 
						|
    Else
 | 
						|
        roNNum = Trim(Left(roNext, InStr(roNext, "\") - 1))
 | 
						|
        roNFlag = Trim(Mid(roNext, InStr(roNext, "\")))
 | 
						|
    End If
 | 
						|
    If InStr(ro, "\h") > 0 Or InStr(ro, "\l") > 0 Then
 | 
						|
        GetARPRO = roNum + GetARPExt(roFlag) + " " + roFlag
 | 
						|
    ElseIf roNum = roNNum And InStr(roNext, "\h") > 0 Or InStr(roNext, "\l") > 0 Then
 | 
						|
        GetARPRO = roNum + GetARPExt(roNFlag) + " " + roFlag
 | 
						|
    ElseIf roNum = roPNum And InStr(roPrev, "\h") > 0 Or InStr(roPrev, "\l") > 0 Then
 | 
						|
        GetARPRO = roNum + GetARPExt(roPFlag) + " " + roFlag
 | 
						|
    Else
 | 
						|
        GetARPRO = ro
 | 
						|
    End If
 | 
						|
'<ARP CDS-LT046-MED-HI1 \n\H>
 | 
						|
End Function
 | 
						|
Function GetARPExt(flg As String) As String
 | 
						|
    '\t\h\1
 | 
						|
    If InStr(flg, "\h") > 0 Then
 | 
						|
        GetARPExt = "-HI"
 | 
						|
    End If
 | 
						|
    If InStr(flg, "\l") > 0 Then
 | 
						|
        GetARPExt = "-LO"
 | 
						|
    End If
 | 
						|
    If InStr(flg, "\1") > 0 Then
 | 
						|
        GetARPExt = GetARPExt + "1"
 | 
						|
    ElseIf InStr(flg, "\2") > 0 Then
 | 
						|
        GetARPExt = GetARPExt + "2"
 | 
						|
    ElseIf InStr(flg, "\3") > 0 Then
 | 
						|
        GetARPExt = GetARPExt + "3"
 | 
						|
    End If
 | 
						|
End Function
 | 
						|
Function GetType(str As String) As String
 | 
						|
    Dim startpt As Integer
 | 
						|
    startpt = InStr(str, "<") + 1
 | 
						|
    GetType = Mid(str, startpt, 3)
 | 
						|
End Function
 | 
						|
Function GetRO(str As String) As String
 | 
						|
    Dim startpt As Integer
 | 
						|
    startpt = InStr(str, "<")
 | 
						|
    Dim endpt As Integer
 | 
						|
    endpt = InStr(str, ">")
 | 
						|
    GetRO = Mid(str, startpt, 1 + endpt - startpt)
 | 
						|
End Function
 | 
						|
Function GetTxt(txt As String) As String
 | 
						|
    txt = Replace(txt, Chr(30), "-")
 | 
						|
    Dim startpt As Integer
 | 
						|
    startpt = InStr(txt, ">""")
 | 
						|
    Dim endpt As Integer
 | 
						|
    endpt = InStr(txt, """<")
 | 
						|
    GetTxt = Mid(txt, startpt + 2, endpt - startpt - 2)
 | 
						|
End Function
 | 
						|
Sub ShowMyself()
 | 
						|
    vlnNextROForm.Show
 | 
						|
End Sub
 | 
						|
Public Sub btnNext2_Click()
 | 
						|
    ContinueProcessing = False
 | 
						|
    Dim fld As Field
 | 
						|
    Set fld = NextRO(Selection.NextField)
 | 
						|
    If fld Is Nothing Then
 | 
						|
        If ContinueProcessing Then
 | 
						|
            Exit Sub
 | 
						|
        End If
 | 
						|
        tbRO.Text = ""
 | 
						|
        tbText.Text = ""
 | 
						|
        Beep
 | 
						|
        MsgBox "No more ROs", vbOKOnly, "End of Document"
 | 
						|
        Exit Sub
 | 
						|
    End If
 | 
						|
    Debug.Print "btnNext2 " + CStr(fld.Index)
 | 
						|
    Dim txt As String
 | 
						|
    Dim myType As String
 | 
						|
    Dim myRO As String
 | 
						|
    Dim myTxt As String
 | 
						|
    txt = fld.Code.Text
 | 
						|
    tbNext.Text = GetNextText(fld)
 | 
						|
    tbPrevious.Text = GetPreviousText(fld)
 | 
						|
    myType = GetType(txt)
 | 
						|
    myRO = GetRO(txt)
 | 
						|
    myTxt = GetTxt(txt)
 | 
						|
    ProcessField fld, myRO, myTxt, tbPrevious.Text, tbNext.Text
 | 
						|
End Sub
 | 
						|
Private Function NextRO(fld As Field) As Field
 | 
						|
    Set NextRO = Nothing
 | 
						|
'topOfNextRO:
 | 
						|
    While Not (fld Is Nothing)
 | 
						|
        On Error GoTo myEH
 | 
						|
        If Mid(fld.Code.Text, 1, 8) = " QUOTE <" Then
 | 
						|
            Dim txt As String
 | 
						|
            Dim myType As String
 | 
						|
            Dim myRO As String
 | 
						|
            txt = fld.Code.Text
 | 
						|
            If tbSearch.TextLength = 0 Or InStr(txt, tbSearch.Text) > 0 Then
 | 
						|
                myType = GetType(txt)
 | 
						|
                myRO = GetRO(txt)
 | 
						|
                If myType = "STP" Then  'setpoint
 | 
						|
                    Set NextRO = fld
 | 
						|
                    Exit Function
 | 
						|
                ElseIf myType = "MEL" Then  'equipment
 | 
						|
                    Dim p As Integer
 | 
						|
                    p = InStr(myRO, "\")
 | 
						|
                    If p > 0 Then
 | 
						|
                        Dim s As String
 | 
						|
                        s = UCase(Mid(myRO, p + 1, 1))
 | 
						|
                        If InStr("NRD", s) > 0 Then
 | 
						|
                            Set NextRO = fld
 | 
						|
                            Exit Function
 | 
						|
                        End If
 | 
						|
                    End If
 | 
						|
                ElseIf myType = "ARP" Then  'alarm
 | 
						|
                   Set NextRO = fld
 | 
						|
                   Exit Function
 | 
						|
                End If
 | 
						|
            End If
 | 
						|
        End If
 | 
						|
        Set fld = fld.Next
 | 
						|
        If fld Is Nothing Then
 | 
						|
            Set fld = Selection.NextField
 | 
						|
        End If
 | 
						|
    Wend
 | 
						|
    Exit Function
 | 
						|
myEH:
 | 
						|
    ContinueProcessing = True
 | 
						|
    Application.OnTime DateAdd("s", 2, Now), "RunAgain"
 | 
						|
    Exit Function
 | 
						|
'    Set NextRO = NextRO(Selection.NextField)
 | 
						|
'    Exit Function
 | 
						|
'    Set fld = Selection.NextField
 | 
						|
'    GoTo topOfNextRO
 | 
						|
End Function
 | 
						|
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
 | 
						|
    Unload Me
 | 
						|
End Sub
 |