Announcement

Collapse

Forum Guidelines

This forum is for finished source code that is working properly. If you have questions about this or any other source code, please post it in one of the Discussion Forums, not here.
See more
See less

Word COM function

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Word COM function

    Bit of a joint effort, this one! My thanks to all those that helped to get it on the road.

    I use this function for printing out a textual version of calculation results so that they can be incorporated into a report without a lot of re-typing.

    I have attached (I hope) a zip with the original PDF printout, along with the Word document for comparison.

    I hope that this will be of use to someone!

    Iain Johnstone


    Code:
    '======================================================
    FUNCTION OutputToWord (message AS STRING, orientationtype AS LONG, fontname AS STRING, fontsize AS SINGLE, _
             fontstyle AS LONG, colour AS LONG, linealignment AS LONG, setupflag AS LONG,printflag AS LONG,closeflag AS LONG) EXPORT AS LONG
    
    'Thanks to Richard Angell, Fred Harris and Jose Roca for their help with this.
    
    'Function usage:-
    'Syntax (eg) = OutputToWord Message,0,"Courier New",10,0,1,0,1,1,0
    '   where Message is formatted text to print
    '         orientation - 0=portrait, 1=landscape
    '         typeface name e.g. "Arial"
    '         fontsize in points
    '         styles - normal=0, bold=1, italic=2, underscore=4  - may be added together for combined effects - e.g. 3 = bold italic
    '         colour - Auto = 0, Black = 1, Blue = 2, Turquoise = 3, BrightGreen = 4, Pink = 5, Red = 6, Yellow = 7, White = 8, DarkBlue = 9
    '                  Teal = 10, Green = 11, Violet = 12, DarkRed = 13, DarkYellow = 14, Gray50 = 15, Gray25 = 16
    '         linealignment - 0=left, 1=centre, 2=right
    '         start - 1 to start up Word, 0 to ignore
    '         print - 1 to print text, 0 to ignore
    '         close - 1 to close Word, 0 to ignore
    'so the above example will start Word and print the message in Courier New at 10 points in normal face, in black and left aligned
    '        OutputToWord Message,0,"Arial",12,1, 2, 1, 0,1,0  will continue to print in Arial 12 pt, in blue bold face and centred
    '        OutputToWord "",0,"",0,0,0,0,0,0,1  will close Word
    
    
        STATIC oWordApp       AS Int__Application   ' Application Interface
        STATIC oWordDoc       AS Int__Document      ' Document Interface
        STATIC oWordSel       AS Selection          ' Selection
        STATIC oWordFont      AS Int__Font          'font
        STATIC oPara          AS Int__ParagraphFormat
        LOCAL vFile     AS VARIANT
        LOCAL vFileFmt  AS VARIANT
        LOCAL result    AS STRING
        LOCAL iDocCount AS LONG
    
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
        IF setupflag<>0 THEN
        ' Open an instance of MSWORD
            IF ISTRUE ISOBJECT(oWordApp) THEN   'no, not with this code ...
              MSGBOX "Tsk, Tsk ... finish the current MSWORD document first!"
              EXIT FUNCTION
            END IF
    
            oWordApp = NEWCOM $PROGID_Application
    
            ' Could MSWORD be opened? If not, terminate this app
              IF ISFALSE ISOBJECT(oWordApp) THEN
                MSGBOX "Unable to open or start MSWORD!"
                EXIT FUNCTION
              END IF
    
            ' Make MSWORD visible in for example normal show state
            oWordApp.Visible = 1
            oWordApp.WindowState = %wdWindowStateNormal
    
    
            ' Get the current document count from the "documents collection"
            iDocCount = oWordApp.Documents.Count
    
            oWordDoc = oWordApp.Documents.Add
    
            IF ISFALSE ISOBJECT(oWordDoc) THEN
                MSGBOX "MSWORD was not able to start a new document." & $CR & _
                              "Please ensure MSWord and VBA are installed."
                GOTO Terminate
            END IF
    
            oWordSel = oWordApp.Selection
            IF ISFALSE ISOBJECT(oWordSel) THEN
               MSGBOX "MSWORD was not able to get a Selection." & $CR & _
                             "Please ensure MSWord and VBA are installed."
               GOTO Terminate
            END IF
    
            oWordFont = oWordSel.Font
            IF ISFALSE ISOBJECT(oWordFont) THEN
               MSGBOX "MSWORD was not able get a font objectt." & $CR & _
                             "Please ensure MSWord and VBA are installed."
               GOTO Terminate
            END IF
    
            ' Get the current document count from the "documents collection" - This should be one value higher than before
            iDocCount = oWordApp.Documents.Count
    
            'set orientation and margins
            oWordDoc.PageSetup.SectionStart = %wdSectionNewPage
    
            oWordDoc.PageSetup.orientation= orientationtype ' from header
    
            oWordApp.Options.MeasurementUnit=3   'points
    
            'measurements in points
            oWordDoc.PageSetup.TopMargin=72
            oWordDoc.PageSetup.BottomMargin=90
            oWordDoc.PageSetup.LeftMargin=36
            oWordDoc.PageSetup.RightMargin=36
            oWordDoc.PageSetup.Gutter=0
    
            IF orientationtype=1 THEN 'landscape A4 converted to points
                oWordDoc.PageSetup.PageWidth = (72*11.66)
                oWordDoc.PageSetup.PageHeight = (72*8.25)
            ELSE
                oWordDoc.PageSetup.PageHeight = (72*11.66)
                oWordDoc.PageSetup.PageWidth = (72*8.25)
            END IF
    
            oWordSel = oWordApp.Selection
    
        END IF
        '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        IF printflag<>0 THEN
    'set font - face may change through document
    
         IF oWordFont.Name <> ACODE$(fontname) THEN
             'for Int_Font
             oWordFont.Name= UCODE$(fontname)   'string from header
         END IF
         IF oWordFont.Size <> fontsize THEN
             oWordFont.Size=fontsize    'single from header
         END IF
    
    'set style
        SELECT CASE Fontstyle
            CASE 0
                oWordFont.Bold = 0
                oWordFont.italic = 0
                oWordFont.underline = 0
    
            CASE 1
                oWordFont.Bold = 1
                oWordFont.italic = 0
                oWordFont.underline = 0
    
            CASE 2
                oWordFont.Bold = 0
                oWordFont.italic = 1
                oWordFont.underline = 0
    
            CASE 3
                oWordFont.Bold = 1
                oWordFont.italic = 1
                oWordFont.underline = 0
    
            CASE 4
                oWordFont.Bold = 0
                oWordFont.italic = 0
                oWordFont.underline = 1
    
            CASE 5
                oWordFont.Bold = 1
                oWordFont.italic = 0
                oWordFont.underline = 1
    
            CASE 5
                oWordFont.Bold = 0
                oWordFont.italic = 1
                oWordFont.underline = 1
    
            CASE 7
                oWordFont.Bold = 1
                oWordFont.italic = 1
                oWordFont.underline = 1
        END SELECT
    
    'set colour
            oWordFont.ColorIndex = colour
    
    'set line alignment
             oWordSel = oWordApp.Selection
             oPara    = oWordSel.ParagraphFormat
             oPara.Alignment=LineAlignment
    
    'printing starts here
            oWordSel = oWordApp.Selection
            oWordSel.TypeText(UCODE$(message))
         '  Set a paragraph marker (end of paragraph)
            oWordSel.TypeParagraph
        END IF
        '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        IF closeflag <>0 THEN
    
        ' Close the current document and then close MSWORD completely if required
            templong=MSGBOX ("Close MSWORD?",%MB_YESNO OR %MB_TASKMODAL,"Masterdrain")
            IF templong=%IDYES THEN
        'save file
                result=INPUTBOX$("Enter filename to save","About to save the document...", "Output.doc") 'this is untidy
                IF RIGHT$(result,4)<>".doc" THEN result=result+".doc"
                vFile    = result
                vFileFmt = %wdFormatDocument
                oWordDoc.SaveAs(vFile, vFileFmt)
    
                oWordApp.ActiveWindow.CLOSE
                oWordApp.Quit
            ' Close all of the Interfaces
                oWordSel  = NOTHING
                oWordDoc  = NOTHING
                oWordApp  = NOTHING
                oWordFont = NOTHING
            END IF
          END IF
          FUNCTION =1:EXIT FUNCTION
    
    Terminate:
                oWordApp.ActiveWindow.CLOSE
                oWordApp.Quit
            ' Close all of the Interfaces
                oWordSel  = NOTHING
                oWordDoc  = NOTHING
                oWordApp  = NOTHING
                oWordFont = NOTHING
    
        FUNCTION =1
    END FUNCTION
    '=======================================================
    Attached Files
    “None but those who have experienced them can conceive of the enticements of science” - Mary Shelley
Working...
X