Programming Dynamic Elements

The objects, methods, and properties in Microsoft Internet Explorer are usually designed for run-time use. In Microsoft Office SharePoint Designer, objects, methods, and properties are designed for design-time use only. You can programmatically add content to an existing page, access selections on a page, create a scripting element, or modify a table.

Adding content to a document using a TextRange object
Accessing user selections using a TextRange object
Adding script to a page
Accessing tables

Adding content to a document using a TextRange object

You can programmatically add HTML content to a Web page by creating a text range and adding the new content to the page as shown in the following example. The text range is created from the BODY element of the Document variable. If the value in the ClearPage parameter is True, the entire content between the opening and closing BODY element is replaced with the new HTML content; otherwise the new content is appended to the original content.

Public Function AddHTMLToPage(Document As Object, _
        HTMLText As String, ClearPage As Boolean) As Boolean
    Dim objRange As TextRange
    Dim objBody As BodyElement

    On Error GoTo CannotAddHTML

    'Create a TextRange object
    If ClearPage Then
        Set objRange = _
            Document.all.tags("BODY").Item(0).createTextRange
        'Clear the current document
        Call objRange.pasteHTML("")
        objRange.collapse False
        Set objRange = Nothing
    End If

    Set objBody = Document.all.tags("BODY").Item(0)
    objBody.innerHTML = objBody.innerHTML & HTMLText & vbCrLf

    AddHTMLToPage = True
    Exit Function

CannotAddHTML:
    AddHTMLToPage = False
End Function

Sub AddNewHTML()
    Dim strHTMLString As String
    Dim obBodyElement As BodyElement

    strHTMLString = "<strong> <em> New Sale on Vintage Wines! </em> </strong>" & vbCr

    If AddHTMLToPage(ActivePageWindow.Document, strHTMLString, True) Then
        Set obBodyElement = _
          ActivePageWindow.Document.all.tags("BODY").Item(0)
    End If
End Sub

Accessing user selections using a TextRange object

You can use the TextRange object to select HTML objects or manipulate a user selection on a specified document. The following example applies a background color to the current selection.

Private Sub ApplyStyleToSelection()
    Dim objRange As TextRange

    Set objRange = ActiveDocument.selection.createRange

    objRange.parentElement.style.backgroundColor = "SkyBlue"
End Sub

Adding script to a page

Scripting in Office SharePoint Designer Visual Basic for Applications is easy. Just load the script into a String variable and insert the String to the HEAD element for the page. (The HEAD element is accessed by using an IHTMLElement interface object.) After the String is added to the page, it is a valid scripting element and can be accessed through the ScriptElement object and modified. The following code adds a script element to the current page, verifies that the script was added, adds a query to the user with OK and Cancel buttons, and then prints some of the script element properties in the Immediate window of the Visual Basic Editor.

Private Sub CreateAScript()
    Dim objScriptElement As ScriptElement
    Dim objHead As IHTMLElement
    Dim objBody As IHTMLElement
    Dim strBody As String
    Dim strHTMLString As String
    Dim strText As String

    'Build a script tag construct.
    strHTMLString = strHTMLString & "<script language=""VBScript"">" _
      & vbCrLf
    strHTMLString = strHTMLString & "Function doOK" & vbCrLf
    strHTMLString = strHTMLString & _
      "msgbox ""Please wait; an order form is being generated...""" & _
      vbCrLf
    strHTMLString = strHTMLString & "End Function" & vbCrLf & vbCrLf
    strHTMLString = strHTMLString & "Function doCancel" & vbCrLf
    strHTMLString = strHTMLString & _
      "msgbox ""Exiting ordering process.""" & vbCrLf
    strHTMLString = strHTMLString & "End Function" & vbCrLf
    strHTMLString = strHTMLString & "</script>" & vbCrLf

    'Build a call tag construct.
    strBody = "<CENTER>" & vbCrLf
    strBody = strBody & _
      "<BUTTON onclick=""doOK()"">OK</BUTTON>" & vbTab
    strBody = strBody & _
      "<BUTTON onclick=""doCancel()"">Cancel</BUTTON>" & vbCrLf
    strBody = strBody & "</CENTER>"

    'Add text to the document
    strText = "I'd like to order some vintage wines."

    'Access the HEAD element.
     Set objHead = ActivePageWindow.Document.all.tags("HEAD").Item(0)

    'Append the script element to the HEAD element (objHead).
    objHead.innerHTML = objHead.innerHTML & strHTMLString

    'Verify that the script element was added.
    If ActivePageWindow.Document.scripts.length = 1 Then
        'Access the script element just added.
        Set objScriptElement = ActivePageWindow.Document.scripts(0)

        'Print script element properties to the Immediate window.
        'JScript only: the next statement gets the FOR= attribute from
        'the JScript; otherwise an empty string prints in the Immediate
        'window.
        Debug.Print objScriptElement.htmlFor

        'Retrieve the content of the script.
        Debug.Print objScriptElement.outerHTML

        'Check scripting language.
        Debug.Print objScriptElement.language
    End If

    'Add a query to the user and call the script element.
    ActiveDocument.body.insertAdjacentHTML "BeforeEnd", _
      "<strong><em>" & strText & "</em></strong><P>" & strBody
End Sub

Accessing tables

Anyone who has created tables and worked with their contents in HTML will find it easy to use Microsoft Visual Basic to access tables. The following program accesses a table on the current page and inserts a cell.

Sub AccessTables()
    Dim objTable As TableElement
    Dim objRow As TableRowElement
    Dim objCell As TableCellElement

    'Get the table.
    Set objTable = ActiveDocument.all.tags("TABLE").Item(0)

    'Get the first row.
    Set objRow = objTable.rows(0)
    MsgBox objRow.cells.Length

    'Get the first cell.
    Set objCell = objRow.cells(0)
    MsgBox objCell.Width

    'Add a new cell to the first row.
    Set objCell = objTable.rows(0).insertCell(objRow.cells.Length)
End Sub


Community Additions

ADD
Show: