Word Automation Error when setting SetPlaceholderText

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.

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

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

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.

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