Word Automation Error when setting SetPlaceholderText

This topic contains 1 reply, has 2 voices, and was last updated by Profile photo of Richard Siddaway Richard Siddaway 2 years ago.

  • Author
    Posts
  • #20845
    Profile photo of Howard Pycock
    Howard Pycock
    Participant

    I'm trying to convert the VBA code from the following articles into PowerShell. Everything seems to work fine apart from the setting of the placeholder text.

    [url]http://msdn.microsoft.com/en-us/library/office/hh314613%28v=office.14%29.aspx[/url]

    [url]http://msdn.microsoft.com/en-us/library/bb256831(v=office.12).aspx[/url]

    Viewing the default placeholdertext is easy enough ;-

    $objCC.PlaceholderText.Value
    Choose an item.

    This is my shortened code purely trying to set the placeholder text.

    $Word = New-Object -Com Word.Application
    $template = "template.docx"   #this can be any old word doc [saved in %TEMP% with a "Section4" bookmark defined]
    $Doc = $Word.Documents.Open($env:temp + "\" + $template)
    $Doc.Activate()	
    $objRange = $Doc.BookMarks.Item("Section4").Range
    $objCC = $objRange.ContentControls.Add(4) # 4 = Drop down list
    $text = "Select upgrade type..."
    $objCC.SetPlaceholderText($null,$null,$text)

    Get Member reveals its an available method ;-

    $objCC |gm

    TypeName: System.__ComObject#{ee95afe3-3026-4172-b078-0e79dab5cc3d}

    Name MemberType Definition
    —- ———- ———-
    SetPlaceholderText Method void SetPlaceholderText (BuildingBlock, Ra...

    No matter how I try to set it fails with the following ;-

    Exception calling "SetPlaceholderText" with "3" argument(s): "Type mismatch.
    (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))"
    At line:1 char:1
    + $objCC.SetPlaceholderText($null,$null,$text)
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ComMethodTargetInvocation

    Can anyone throw any light on why this isnt working and how it can be done.

    Thanks.

  • #20855
    Profile photo of Richard Siddaway
    Richard Siddaway
    Moderator

    The method expects one out of 3 possible parameters each of which is a different type. It doesn't recognise $null so treats it as the first parameter and fails because it isn't of the correct type

    I couldn't get your code to actually add the control to work so modified it to this

    $Word = New-Object -Com Word.Application
    $word.visible = $true
    $template = "c:\test\template.docx"
    $Doc = $Word.Documents.Open($template)
    $Doc.Activate()

    $cntrl = [Enum]::Parse([Microsoft.Office.Interop.Word.WdContentControlType], "wdContentControlDropdownList")

    $objCC = $doc.ContentControls.Add($cntrl)

    $objCC.DropdownListEntries.Add("PowerShell")
    $objCC.DropdownListEntries.Add("Ruby")
    $objCC.DropdownListEntries.Add("Perl")

    Still looking at the SetPlaceHoldertext method

You must be logged in to reply to this topic.