Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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 用图片更改段落的样式_Vba_Image_Ms Word - Fatal编程技术网

Vba 用图片更改段落的样式

Vba 用图片更改段落的样式,vba,image,ms-word,Vba,Image,Ms Word,我正在努力解决以下问题。 在一个文档中,我有许多内联图片和一些浮动图片。 我想写一段代码,改变包含图片的段落的风格。让我们称这种风格为“图片”。唯一的问题是段落浮动图片,即带有图片和一些文本的图片。在这种情况下,我想保持风格不变 下面是它在Word中的外观示例 到目前为止,我已经编写了这样的代码: Sub ApplyPictureStyle() Application.ScreenUpdating = False Dim iShp As InlineShape For Each iShp In

我正在努力解决以下问题。 在一个文档中,我有许多内联图片和一些浮动图片。 我想写一段代码,改变包含图片的段落的风格。让我们称这种风格为“图片”。唯一的问题是段落浮动图片,即带有图片和一些文本的图片。在这种情况下,我想保持风格不变

下面是它在Word中的外观示例

到目前为止,我已经编写了这样的代码:

Sub ApplyPictureStyle()
Application.ScreenUpdating = False
Dim iShp As InlineShape
For Each iShp In ActiveDocument.InlineShapes
  With iShp
    If .Type = wdInlineShapePicture Then .Range.Style = "Picture"
  End With
Next
Application.ScreenUpdating = True
End Sub
正如我前面解释的,这样的代码适用于所有图片


是否可以重写此代码,使其适用于内联图片,但同时忽略浮动图片?

浮动图片是没有“内联文本”包装样式的图片。屏幕截图中的所有图片都是内联图片。因此,要对这些图片应用不同的格式,您需要确定段落是仅包含图片还是图片加文本

您可以使用
Len
函数来计算段落文本中的字符数。仅包含图片的段落将仅包含2个字符,即使图片具有备用文本

Sub ApplyPictureStyle()
  Application.ScreenUpdating = False
  Dim iShp As InlineShape
  For Each iShp In ActiveDocument.InlineShapes
    With iShp
      If .Type = wdInlineShapePicture Then
        If Len(.Range.Paragraphs(1).Range.Text) = 2 Then
          'paragraph only contains a picture
          .Range.style = "Picture"
        End If
      End If
    End With
  Next
  Application.ScreenUpdating = True
End Sub

从问题中的图片来看,不清楚代码在什么情况下影响了错误的段落。我们看不到内联形状和形状在哪里。我们是否假设某些段落既有内联形状,也有形状的锚定?看你问题中的截图,我怀疑所有图片都是内联形状。内联形状是使用内联的包裹类型格式化的形状。您的代码仅适用于该类型的形状。我怀疑您实际上想做的是将样式应用于只包含内联图片而不包含文本的段落。是吗?@Cindymister你能告诉我内联形状和锚定形状的区别吗。所有图片都被简单地插入:-第一张只是段落中的图片。-第二个是段落文本中的图片。在VBA中,你会如何区分这两种情况?我同意Timothy的观点,它们看起来像是内联的。当图片与文本内联时,它们的位置受段落格式的影响,段落中的图片本身没有使其与周围有文本的图片不同的区别特征。因此,代码必须找到每个图片,然后测试前后是否有文本,然后应用任何段落格式。如果有浮动图片,则它们将定位到段落,但段落格式只会间接影响图片(即,如果它是相对于该段定位的,则当该段移动时,它将移动)。