Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA Word将现有形状添加到主标题_Vba_Ms Word - Fatal编程技术网

VBA Word将现有形状添加到主标题

VBA Word将现有形状添加到主标题,vba,ms-word,Vba,Ms Word,我试图先构建一个简单的矩形形状,然后将构建的形状添加到Word中的第一个节标题(主)。但似乎并没有一个API来实现这一点。取而代之的是,我似乎必须在页眉内部重新创建一个新的形状 用于在标头内创建形状的常规代码(添加和创建操作合并到一个API“AddShape”): 我宁愿这样做(伪代码): 这种手术可能吗?我尝试不复制用于构建形状的代码,因为我使用该代码构建了一个用于页眉外部的形状。谢谢。因为它是相同的形状,只需指向原稿的锚点并使用.FormattedText方法在标题中复制它即可。例如: Di

我试图先构建一个简单的矩形形状,然后将构建的形状添加到Word中的第一个节标题(主)。但似乎并没有一个API来实现这一点。取而代之的是,我似乎必须在页眉内部重新创建一个新的形状

用于在标头内创建形状的常规代码(添加和创建操作合并到一个API“AddShape”):

我宁愿这样做(伪代码):


这种手术可能吗?我尝试不复制用于构建形状的代码,因为我使用该代码构建了一个用于页眉外部的形状。谢谢。

因为它是相同的形状,只需指向原稿的锚点并使用.FormattedText方法在标题中复制它即可。例如:

Dim doc As Document, Rng As Range
Set doc = ActiveDocument
With doc
  Set Rng = .Sections(1).Headers(wdHeaderFooterPrimary).Range
  Rng.Collapse wdCollapseStart
  Rng.FormattedText = .Shapes(1).Anchor.FormattedText
End With

形状必须存在于某个地方——它不能从文档中“抽象”出来。如果您将形状构建代码重构为一个单独的子代码,其中包含一个接受位置的参数,那么您可以对两个位置使用相同的代码。谢谢。当我离开电脑几个小时后,我发现了同样的事情——形状只能存在于某种形状列表中,尽管它是“对象”。如果@Tim的评论是答案而不是评论,我会将其标记为答案。谢谢你提供了额外的清晰度。FormattedText是否将整个形状(以及相关的Textframe.Text)复制到标题中?我修改了代码,首先根据需要在标题内部或外部创建形状,然后调用公共子例程对所有形状和文本属性进行格式化。这样,只有形状创建代码是“复制的”(而不是真正的复制,因为它在不同的形状集合中创建形状…如果您指的是具有文本内容的单个形状和/或组,那么是的。
Set hf = doc.Sections(1).Footers(wdHeaderFooterPrimary)
Set shp = MyFunctionForBuildingAShapeThatIAlreadyUseElseWhere
hf.Shapes.Add(shp)
Dim doc As Document, Rng As Range
Set doc = ActiveDocument
With doc
  Set Rng = .Sections(1).Headers(wdHeaderFooterPrimary).Range
  Rng.Collapse wdCollapseStart
  Rng.FormattedText = .Shapes(1).Anchor.FormattedText
End With