Excel中的MS Word表单中的SetPlaceholderText

时间:2018-12-04 08:54:39

标签: excel vba ms-word word-contentcontrol

我正在编写一个Excel VBA宏,以将MS Word Form转换为各种语言。原始的英语短语列在A列中,而相应的翻译则列在B列,C列等中。用表格的文本部分替换英语翻译没有问题,但是我在changing the Placeholder text中苦苦挣扎内容控件。 (我应该提一下,我只能使用Office 2010,因为这是公司仍然可以使用的功能。)

这是我的代码:

Dim frm As Word.Document, cc As ContentControl
Set frm = Documents.Open("C:\[document]", False)

If frm.FormsDesign = False Then 'make sure doc is in Design Mode
  frm.ToggleFormsDesign
End If

For Each cc In frm.ContentControls
 If cc.Type = 1 Then    'this is for textboxes
   cc.SetPlaceholderText , , "phldr 1"
 Else  'this is for all other controls:  eg, drop-downs
  cc.SetPlaceholderText , , "phldr 2"
 End If
Next cc

运行此命令时,占位符文本(原始英语形式为“输入文本”之类的东西)会完全消失,而不会替换为预期的占位符文本。

我尝试从另一个 Word 文档(而不是从Excel)运行代码,即不是从表单本身运行代码,

但是,如果我以原始格式插入此代码(进行了适当的更改,例如将“ frm”更改为“ ThisDocument”),则可以正常工作。换句话说,当VBA模块位于同一(Word)文档中时,我可以成功使用SetPlaceholderText方法。但是我真的很想从Excel中运行它,因为这是我将列出多个翻译的地方。

1 个答案:

答案 0 :(得分:0)

这是SetPlaceholderText方法的“怪胎”。我不记得我曾经见过它能像以前那样工作的原因,但是以下对我有用。

备注:

仅当“设计模式”未启用时,它才对我有用,因此我在示例代码中对其进行了更改。

SetPlaceholderText仅在指定 all 参数的情况下才能在“父”文档之外运行。传递给它们的值可以不确定(Nothing),但是对象模型需要全部三个。

If doc.FormsDesign = True Then 'make sure doc is NOT in Design Mode
  doc.ToggleFormsDesign
End If

For Each cc In doc.Contentcontrols
 If cc.Type = 1 Then    'this is for textboxes
   cc.SetPlaceholderText Range:=Nothing, BuildingBlock:=Nothing, Text:="phldr 1"
 Else  'this is for all other controls:  eg, drop-downs
  cc.SetPlaceholderText Range:=Nothing, BuildingBlock:=Nothing, Text:="phldr 2"
 End If
Next cc