home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 November / pcwk_11_98a.iso / Wtestowe / Vistdtk / Install / Data.Z / Mainwnd.FRM < prev    next >
Text File  |  1996-10-31  |  21KB  |  654 lines

  1. VERSION 4.00
  2. Begin VB.Form frmMainWindow 
  3.    Appearance      =   0  'Flat
  4.    BackColor       =   &H00C0C0C0&
  5.    BorderStyle     =   1  'Fixed Single
  6.    Caption         =   "Visio Inventory"
  7.    ClientHeight    =   6000
  8.    ClientLeft      =   3330
  9.    ClientTop       =   3720
  10.    ClientWidth     =   8535
  11.    BeginProperty Font 
  12.       name            =   "MS Sans Serif"
  13.       charset         =   0
  14.       weight          =   700
  15.       size            =   8.25
  16.       underline       =   0   'False
  17.       italic          =   0   'False
  18.       strikethrough   =   0   'False
  19.    EndProperty
  20.    ForeColor       =   &H80000008&
  21.    Height          =   6690
  22.    Icon            =   "MAINWND.frx":0000
  23.    Left            =   3270
  24.    LinkTopic       =   "Form2"
  25.    MaxButton       =   0   'False
  26.    ScaleHeight     =   6000
  27.    ScaleWidth      =   8535
  28.    Top             =   3090
  29.    Width           =   8655
  30.    Begin Threed.SSPanel ctlStatusLine 
  31.       Align           =   2  'Align Bottom
  32.       Height          =   375
  33.       Left            =   0
  34.       TabIndex        =   2
  35.       Top             =   5625
  36.       Width           =   8535
  37.       _Version        =   65536
  38.       _ExtentX        =   15055
  39.       _ExtentY        =   661
  40.       _StockProps     =   15
  41.       Caption         =   "Ready"
  42.       BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851} 
  43.          Name            =   "MS Sans Serif"
  44.          Size            =   8.25
  45.          Charset         =   0
  46.          Weight          =   400
  47.          Underline       =   0   'False
  48.          Italic          =   0   'False
  49.          Strikethrough   =   0   'False
  50.       EndProperty
  51.       BevelInner      =   1
  52.       RoundedCorners  =   0   'False
  53.       Font3D          =   3
  54.       Alignment       =   1
  55.    End
  56.    Begin VB.ComboBox ctlPageList 
  57.       Appearance      =   0  'Flat
  58.       Height          =   300
  59.       Left            =   1260
  60.       Style           =   2  'Dropdown List
  61.       TabIndex        =   4
  62.       Top             =   480
  63.       Width           =   2715
  64.    End
  65.    Begin VB.ComboBox ctlDocList 
  66.       Appearance      =   0  'Flat
  67.       Height          =   300
  68.       Left            =   1260
  69.       Style           =   2  'Dropdown List
  70.       TabIndex        =   3
  71.       Top             =   120
  72.       Width           =   2715
  73.    End
  74.    Begin VB.ComboBox ctlSortField 
  75.       Appearance      =   0  'Flat
  76.       Height          =   300
  77.       Left            =   1260
  78.       Style           =   2  'Dropdown List
  79.       TabIndex        =   1
  80.       Top             =   840
  81.       Width           =   2715
  82.    End
  83.    Begin Threed.SSPanel Panel3D1 
  84.       Height          =   5655
  85.       Left            =   0
  86.       TabIndex        =   5
  87.       Top             =   0
  88.       Width           =   8535
  89.       _Version        =   65536
  90.       _ExtentX        =   15055
  91.       _ExtentY        =   9975
  92.       _StockProps     =   15
  93.       BevelInner      =   1
  94.       Begin MSGrid.Grid ctlQueryGrid 
  95.          Height          =   4275
  96.          Left            =   120
  97.          TabIndex        =   0
  98.          Top             =   1200
  99.          Width           =   8235
  100.          _Version        =   65536
  101.          _ExtentX        =   14526
  102.          _ExtentY        =   7541
  103.          _StockProps     =   77
  104.          BackColor       =   -2147483643
  105.          Cols            =   9
  106.          FixedCols       =   0
  107.       End
  108.       Begin Threed.SSCommand btnReQuery 
  109.          Height          =   1035
  110.          Left            =   6780
  111.          TabIndex        =   10
  112.          Top             =   120
  113.          Width           =   1575
  114.          _Version        =   65536
  115.          _ExtentX        =   2778
  116.          _ExtentY        =   1826
  117.          _StockProps     =   78
  118.          Caption         =   "ReQuery Visio"
  119.          Picture         =   "MAINWND.frx":030A
  120.       End
  121.       Begin Threed.SSCommand btnChooseFields 
  122.          Height          =   1035
  123.          Left            =   5100
  124.          TabIndex        =   9
  125.          Top             =   120
  126.          Width           =   1575
  127.          _Version        =   65536
  128.          _ExtentX        =   2778
  129.          _ExtentY        =   1826
  130.          _StockProps     =   78
  131.          Caption         =   "Choose Fields"
  132.          Picture         =   "MAINWND.frx":0624
  133.       End
  134.       Begin VB.Label Label3 
  135.          Alignment       =   1  'Right Justify
  136.          Appearance      =   0  'Flat
  137.          BackColor       =   &H00C0C0C0&
  138.          Caption         =   "Sort Field:"
  139.          ForeColor       =   &H80000008&
  140.          Height          =   195
  141.          Left            =   300
  142.          TabIndex        =   7
  143.          Top             =   900
  144.          Width           =   915
  145.       End
  146.       Begin VB.Label Label2 
  147.          Alignment       =   1  'Right Justify
  148.          Appearance      =   0  'Flat
  149.          BackColor       =   &H00C0C0C0&
  150.          Caption         =   "Page:"
  151.          ForeColor       =   &H80000008&
  152.          Height          =   195
  153.          Left            =   420
  154.          TabIndex        =   8
  155.          Top             =   540
  156.          Width           =   795
  157.       End
  158.       Begin VB.Label Label1 
  159.          Alignment       =   1  'Right Justify
  160.          Appearance      =   0  'Flat
  161.          BackColor       =   &H00C0C0C0&
  162.          Caption         =   "Document:"
  163.          ForeColor       =   &H80000008&
  164.          Height          =   195
  165.          Left            =   180
  166.          TabIndex        =   6
  167.          Top             =   180
  168.          Width           =   1035
  169.       End
  170.       Begin VB.Shape Shape1 
  171.          BackColor       =   &H00000000&
  172.          BackStyle       =   1  'Opaque
  173.          Height          =   4275
  174.          Left            =   180
  175.          Top             =   1260
  176.          Width           =   8235
  177.       End
  178.    End
  179.    Begin VB.Menu FileMenu 
  180.       Caption         =   "&File"
  181.       Begin VB.Menu FileExport 
  182.          Caption         =   "&Export"
  183.          Shortcut        =   ^S
  184.       End
  185.       Begin VB.Menu FileSep 
  186.          Caption         =   "-"
  187.       End
  188.       Begin VB.Menu FilePrint 
  189.          Caption         =   "&Print"
  190.          Enabled         =   0   'False
  191.       End
  192.       Begin VB.Menu FilePrinterSetup 
  193.          Caption         =   "Pri&nter Setup"
  194.          Enabled         =   0   'False
  195.       End
  196.       Begin VB.Menu FilePageSetup 
  197.          Caption         =   "Page Se&tup"
  198.          Enabled         =   0   'False
  199.       End
  200.       Begin VB.Menu FileSep2 
  201.          Caption         =   "-"
  202.       End
  203.       Begin VB.Menu FileExit 
  204.          Caption         =   "E&xit"
  205.       End
  206.    End
  207.    Begin VB.Menu EditMenu 
  208.       Caption         =   "&Edit"
  209.       Begin VB.Menu EditCopy 
  210.          Caption         =   "&Copy"
  211.          Enabled         =   0   'False
  212.          Shortcut        =   ^{INSERT}
  213.       End
  214.       Begin VB.Menu EditSep1 
  215.          Caption         =   "-"
  216.       End
  217.       Begin VB.Menu EditSelectAll 
  218.          Caption         =   "&Select All"
  219.       End
  220.    End
  221.    Begin VB.Menu OptionsMenu 
  222.       Caption         =   "&Options"
  223.       Begin VB.Menu ExportSetup 
  224.          Caption         =   "E&xport Setup"
  225.       End
  226.    End
  227.    Begin VB.Menu HelpMenu 
  228.       Caption         =   "&Help"
  229.       Begin VB.Menu HelpContents 
  230.          Caption         =   "&Contents"
  231.          Enabled         =   0   'False
  232.          Shortcut        =   {F1}
  233.       End
  234.       Begin VB.Menu HelpSearch 
  235.          Caption         =   "&Search For Help On"
  236.          Enabled         =   0   'False
  237.       End
  238.       Begin VB.Menu HelpSep 
  239.          Caption         =   "-"
  240.       End
  241.       Begin VB.Menu HelpAbout 
  242.          Caption         =   "&About"
  243.       End
  244.    End
  245. End
  246. Attribute VB_Name = "frmMainWindow"
  247. Attribute VB_Creatable = False
  248. Attribute VB_Exposed = False
  249. ' -----------------------------------------------------------------------------
  250. ' Copyright (C) 1993-1996 Visio Corporation. All rights reserved.
  251. '
  252. ' You have a royalty-free right to use, modify, reproduce and distribute
  253. ' the Sample Application Files (and/or any modified version) in any way
  254. ' you find useful, provided that you agree that Visio has no warranty,
  255. ' obligations or liability for any Sample Application Files.
  256. ' -----------------------------------------------------------------------------
  257.  
  258. Option Explicit                                 '-- All Variable Explicit
  259.  
  260. Dim iSortIndex As Integer                       '-- Sort Field Index
  261. Dim iPageIndex As Integer                       '-- Current Page Index
  262. Dim iDocIndex As Integer                        '-- Current Document Index
  263.  
  264.  
  265.                                                                     
  266.  
  267. Private Sub btnChooseFields_Click()
  268. '------------------------------------
  269. '--- btnChooseFields_Click ----------
  270. '--
  271. '--   When the Choose Fields is chosen we load the Choose Fields form.  After
  272. '-- It's done we re-paint the query grid to take into account any changes made.
  273. '--
  274.     
  275.     frmChooseFields.Show 1
  276.  
  277.     If Not GetIncludeFlag(iSortIndex) Then
  278.         iSortIndex = 0
  279.     End If
  280.  
  281.     UpdateFieldsList
  282.     RePaint
  283. End Sub
  284.  
  285. Private Sub btnReQuery_Click()
  286. '------------------------------------
  287. '--- btnReQuery_Click ---------------
  288. '--
  289. '--   When the user presses this button we just want to requery the database.
  290. '--
  291.  
  292.   UpdateDatabase
  293. End Sub
  294.  
  295. Private Sub ctlDocList_Click()
  296. '------------------------------------
  297. '--- ctlDocList_Click ---------------
  298. '--
  299. '--   When the user clicks a document name we check to see if it's different
  300. '-- than our internal index iDocIndex.  If so we update the page list and the
  301. '-- internal index.
  302. '--
  303.  
  304.   If iDocIndex <> ctlDocList.ListIndex Then         '-- If Different Indexes...
  305.     iDocIndex = ctlDocList.ListIndex                '--   Update Internal Index
  306.  
  307.     Call UpdatePageList                             '--   Update Page List
  308.   End If
  309. End Sub
  310.  
  311. Private Sub ctlPageList_Click()
  312. '------------------------------------
  313. '--- ctlDocList_Change --------------
  314. '--
  315. '--   When the user clicks a page name we check to see if it's different
  316. '-- than our internal index iPageIndex.  If so we requery the database and
  317. '-- size the columns.
  318. '--
  319.  
  320.   If iPageIndex <> ctlPageList.ListIndex Then
  321.     iPageIndex = ctlPageList.ListIndex          '-- Update Page Index
  322.  
  323.     ReQuery CurDocIndex(), CurPageIndex()
  324.     RePaint
  325.   End If
  326. End Sub
  327.  
  328. Private Sub ctlQueryGrid_SelChange()
  329. '------------------------------------
  330. '--- ctlQueryGrid_SelChange ---------
  331. '--
  332. '--
  333. '--
  334.  
  335.     If (ctlQueryGrid.SelEndCol >= ctlQueryGrid.SelStartCol) Then
  336.         If (ctlQueryGrid.SelEndRow >= ctlQueryGrid.SelStartRow) Then
  337.             EditCopy.Enabled = True
  338.             Exit Sub
  339.         End If
  340.     End If
  341.  
  342.     EditCopy.Enabled = False
  343. End Sub
  344.  
  345. Private Sub ctlSortField_Click()
  346. '------------------------------------
  347. '--- cstSortField_Click -------------
  348. '--
  349. '--   When the user clicks a sort field name we check to see if it's different
  350. '-- than our internal index iSortIndex.  If so we process the change and update
  351. '-- the internal index.
  352. '--
  353.  
  354.   If iSortIndex <> ctlSortField.ListIndex Then
  355.     iSortIndex = ctlSortField.ListIndex
  356.  
  357.     SetSort iSortIndex
  358.  
  359.     RePaint
  360.   End If
  361. End Sub
  362.  
  363. Private Function CurDocIndex() As Integer
  364. '------------------------------------
  365. '--- CurDocIndex --------------------
  366. '--
  367. '--   Simply returns the collection index of the current document.  Note, it
  368. '-- returns the collection index, not the control index.
  369. '--
  370.  
  371.   Dim iIndex As Integer
  372.  
  373.   iIndex = ctlDocList.ListIndex
  374.   
  375.   CurDocIndex = GetCollIndex(iIndex)
  376. End Function
  377.  
  378. Private Function CurPageIndex() As Integer
  379. '------------------------------------
  380. '--- CurPageIndex -------------------
  381. '--
  382. '--   Simply returns the index of the current page.  However, it returns the
  383. '-- collection index, not the page controls index.
  384. '--
  385.  
  386.   CurPageIndex = ctlPageList.ListIndex + 1       '-- Return Index
  387. End Function
  388.  
  389. Private Sub EditCopy_Click()
  390. '------------------------------------
  391. '--- EditCopy_Click -----------------
  392. '--
  393. '--   Copies the highlighted selection on the grid to the clipboard.
  394. '--
  395.  
  396.     Dim iRow As Integer, iCol As Integer, Temp As String
  397.     Dim iOldRow As Integer, iOldCol As Integer
  398.     Dim sFieldSep As String
  399.  
  400.     sFieldSep = g_FieldSeps(g_iFieldSepIdx)
  401.  
  402.     iOldRow = ctlQueryGrid.Row                  '-- Save Last Row And Column
  403.     iOldCol = ctlQueryGrid.Col
  404.  
  405.     If g_bIncFieldNames Then                    '-- Include Field Names
  406.         ctlQueryGrid.Row = 0                    '-- Move To Field Row
  407.  
  408.         For iCol = ctlQueryGrid.SelStartCol To ctlQueryGrid.SelEndCol
  409.             ctlQueryGrid.Col = iCol
  410.  
  411.             If iCol <> ctlQueryGrid.SelStartCol Then
  412.                 Temp = Temp + sFieldSep
  413.             End If
  414.  
  415.             Temp = Temp + ApplyTextDel(ctlQueryGrid.Text)
  416.         Next iCol
  417.  
  418.         Temp = Temp + Chr$(13) + Chr$(10)       '-- Append CR/LF
  419.     End If
  420.  
  421.     For iRow = ctlQueryGrid.SelStartRow To ctlQueryGrid.SelEndRow
  422.         ctlQueryGrid.Row = iRow
  423.  
  424.         For iCol = ctlQueryGrid.SelStartCol To ctlQueryGrid.SelEndCol
  425.             ctlQueryGrid.Col = iCol
  426.  
  427.             If iCol <> ctlQueryGrid.SelStartCol Then
  428.                 Temp = Temp + sFieldSep
  429.             End If
  430.  
  431.             Temp = Temp + ApplyTextDel(ctlQueryGrid.Text)
  432.         Next iCol
  433.  
  434.         Temp = Temp + Chr$(13) + Chr$(10)       '-- Append CR/LF
  435.     Next iRow
  436.  
  437.     ctlQueryGrid.Row = iOldRow                  '-- Restore Last Row And Column
  438.     ctlQueryGrid.Col = iOldCol
  439.  
  440.     Clipboard.Clear                             '-- Clear Clipboard Contents
  441.     Clipboard.SetText Temp                      '-- Put Text On Clipboard
  442. End Sub
  443.  
  444. Private Sub EditSelectAll_Click()
  445. '------------------------------------
  446. '--- EditSelectAll_Click ------------
  447. '--
  448. '--   Selects all data on the grid.
  449. '--
  450.  
  451.     ctlQueryGrid.SelStartCol = ctlQueryGrid.FixedCols
  452.     ctlQueryGrid.SelStartRow = ctlQueryGrid.FixedRows
  453.  
  454.     ctlQueryGrid.SelEndCol = ctlQueryGrid.Cols - 1
  455.     ctlQueryGrid.SelEndRow = ctlQueryGrid.Rows - 1
  456. End Sub
  457.  
  458. Private Sub ExportSetup_Click()
  459. '------------------------------------
  460. '--- ExportSetup_Click --------------
  461. '--
  462. '--   Displays the export setup dialog.
  463. '--
  464.  
  465.     frmExportSetup.Show 1
  466. End Sub
  467.  
  468. Private Sub FileExit_Click()
  469. '------------------------------------
  470. '--- FileExit_Click -----------------
  471. '--
  472. '--   When the user chooses to quit we unload the main form and end.
  473. '--
  474.  
  475.   Unload frmMainWindow                          '-- Unload Main Frame
  476.  
  477.   End                                           '-- End Program
  478. End Sub
  479.  
  480. Private Sub FileExport_Click()
  481. '------------------------------------
  482. '--- FileExport_Click ---------------
  483. '--
  484. '--
  485. '--
  486.     On Error GoTo ExportErrHandler
  487.     Dim Temp As String
  488.  
  489.     Const OFN_HIDEREADONLY = &H4&
  490.     Const OFN_OVERWRITEPROMPT = &H2&
  491.  
  492.     frmSaveAs.CMDialog1.CancelError = True
  493.     frmSaveAs.CMDialog1.Flags = OFN_HIDEREADONLY Or OFN_OVERWRITEPROMPT
  494.     frmSaveAs.CMDialog1.Action = 2
  495.     
  496.     Temp = frmSaveAs.CMDialog1.filename
  497.     ExportToFile Temp
  498.  
  499.     Exit Sub
  500.  
  501. ExportErrHandler:
  502.     Exit Sub
  503.     Resume Next
  504. End Sub
  505.  
  506. Private Sub Form_Activate()
  507. '------------------------------------
  508. '--- frmMainWindow:Form_Activate ----
  509. '--
  510. '--   When the window is activated we always update the database in case the
  511. '-- user has made any changes in Visio.  Need to add a flag to not update after
  512. '-- internal form changes.
  513. '--
  514. '
  515.  
  516.   'Remmed by TDS - must check for internal activates (i.e. About form unloaded)
  517.   'UpdateDatabase                                '-- Update Database Lists
  518. End Sub
  519.  
  520. Private Sub Form_Load()
  521. '------------------------------------
  522. '--- frmMainWindow:Form_Load --------
  523. '--
  524. '--   Handles application initialization.  All we do at first is update the
  525. '-- field list.  The document and page lists should be handled by the window
  526. '-- Activate event.
  527. '--
  528.  
  529.   iSortIndex = 0                                '-- Default To Name Sort
  530.   iDocIndex = -1                                '-- Default To No Doc
  531.   iPageIndex = -1                               '-- Default To No Page
  532.   EditCopy.Enabled = False                      '-- Disable Copy Option
  533.  
  534.   InitExportOptions                             '-- Initialize Export Vars
  535.   UpdateFieldsList                              '-- Update Sort Field List
  536. End Sub
  537.  
  538. Private Sub Form_Unload(Cancel As Integer)
  539.     End
  540. End Sub
  541.  
  542. Private Sub HelpAbout_Click()
  543.   frmAboutDialog.Show 1                             '-- Show Help About
  544. End Sub
  545.  
  546. Private Sub UpdateDatabase()
  547. '------------------------------------
  548. '--- UpdateDatabase -----------------
  549. '--
  550. '--   Updates the internal database of valid Visio document which are loaded.
  551. '-- Should be called whenever the focus is set or application is activated to
  552. '-- make sure the controls reflect Visio's open documents.  Only call
  553. '-- UpdateDocList because it's click event updates the page list anyways.
  554. '--
  555.  
  556.   StatusLineMsg "Querying Visio Documents..."
  557.   UpdateValidDocList                            '-- Update Valid Documents
  558.   
  559.   StatusLineMsg "Updating Document List..."
  560.   UpdateDocList                                 '-- Update Document List Box
  561.   ClearStatusLine
  562. End Sub
  563.  
  564. Private Sub UpdateDocList()
  565. '------------------------------------
  566. '--- UpdateDocList ------------------
  567. '--
  568. '--   Handles updating the document drop down list on the main form.  Uses the
  569. '-- Valid Document Interface for retrieving document names.  By setting
  570. '-- the list box index we guarantee a Click event will occur and iDocIndex
  571. '-- to be updated by the boxes Click handler.  When this happens it chains
  572. '-- down to the page list as well.
  573. '--
  574.  
  575.   Dim I As Integer
  576.  
  577.   iDocIndex = -1                                  '-- Force ReQuery
  578.   ctlDocList.Clear                                '-- Clear Document List
  579.   StatusLineMsg "Updating Document List..."       '-- Update Status Line
  580.  
  581.   If DocCount() > 0 Then                          '-- Any Documents...
  582.     For I = 0 To DocCount() - 1                   '--   Loop Through Docs...
  583.       ctlDocList.AddItem StripPath(GetDocName(I)) '--     Add Name
  584.     Next I
  585.                                                 
  586.     ctlDocList.ListIndex = 0                      '--   Select First Document
  587.                                                   '--     And Get
  588.   Else
  589.     ctlDocList.ListIndex = -1                     '--   No Doc Selected
  590.   End If
  591.  
  592.   ClearStatusLine                                   '-- Clear Status Line
  593. End Sub
  594.  
  595. Private Sub UpdateFieldsList()
  596. '------------------------------------
  597. '--- UpdateFieldsList ---------------
  598. '--
  599. '--   Fills in the main form's Sort Field list box.
  600. '--
  601.  
  602.   Dim I As Integer
  603.  
  604.   ctlSortField.Clear                            '-- Clear List
  605.  
  606.   For I = 0 To IncludeCount() - 1               '-- Loop Through Used Fields...
  607.     ctlSortField.AddItem IncludeNames(I)        '--   Add Next Field Name
  608.   Next I
  609.  
  610.   ctlSortField.ListIndex = 0                    '-- Select First Field
  611. End Sub
  612.  
  613. Private Sub UpdatePageList()
  614. '------------------------------------
  615. '--- UpdatePageList -----------------
  616. '--
  617. '--   Updates the page drop down list names.  Uses the Valid Document Interface
  618. '-- to retrieve the current document.  By setting the page index to -1 we force
  619. '-- a requery when the list box's Click handler gets called.
  620. '--
  621.  
  622.   Dim I As Integer, iPageCount As Integer, iCurDoc As Integer
  623.   Dim pagsPageList As Visio.Pages, docCurDoc As Visio.DOCUMENT
  624.  
  625.   iPageIndex = -1                                   '-- Force ReQuery
  626.   ctlPageList.Clear                                 '-- Clear Page List
  627.   iCurDoc = ctlDocList.ListIndex                    '-- Get Current Doc Index
  628.  
  629.   If iCurDoc = -1 Then Exit Sub                     '-- If No Document Exit
  630.  
  631.   StatusLineMsg "Updating Page List..."             '-- Updating Page List
  632.   iCurDoc = GetCollIndex(iCurDoc)                   '-- Get Collection Index
  633.  
  634.   AppConnect
  635.   Set docCurDoc = g_appVisio.Documents(iCurDoc)     '-- Get Current Document
  636.  
  637.   iPageCount = docCurDoc.Pages.Count                '-- Get Page Count
  638.  
  639.   If iPageCount > 0 Then                            '-- Any Documents....
  640.     Set pagsPageList = docCurDoc.Pages              '--   Get Page List
  641.  
  642.     For I = 1 To iPageCount                         '--   Loop Through Pages...
  643.       ctlPageList.AddItem pagsPageList(I).Name      '--     Add Name
  644.     Next I
  645.  
  646.     ctlPageList.ListIndex = 0                       '-- Set To Active Doc
  647.   Else
  648.     ctlPageList.ListIndex = -1                      '-- No Selection
  649.   End If
  650.  
  651.   ClearStatusLine                                   '-- Clear Status Line
  652. End Sub
  653.  
  654.