Author Posts

November 28, 2014 at 3:11 am

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.

November 28, 2014 at 10:29 am

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