微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

选择并重新定位MS Word 2016中的图像

如何解决选择并重新定位MS Word 2016中的图像

我是一位科学作家。有时我在大型文档中有重复的任务,每天有很多文档。一个任务是在每页中插入一张图像(不同页面使用不同的图像),然后将图像放置在页面的左下方(页面右侧的.45英寸;页面顶部下方的10.35英寸)。

插入图像后,我试图在每个页面上记录一个简单的宏,但是MS Word不允许我在记录宏时选择图像。

我认为VBA可以为我提供帮助,但是我无法想到一种方法。我只有VBA的基本知识。我想“拍摄一张预先选择的图像,然后在页面中重新放置它。”

SatxJoe

解决方法

我通常会要求您付出更多的努力,但我知道您不是软件工程师,并且擅长处理映像。我花了一些时间为自己的应用程序弄清楚这一点。尽管看起来很简单,但不是我开始的时候。

尝试以下入门工具包。您必须添加自己的错误处理以及所需的任何参数和逻辑。键盘快捷键也很方便。

它假定该图像不是嵌入式图像(请参阅Word中的定位选项),而是在页面上“浮动”。这样可以重新放置它。由于内联代码和非内联代码不同,因此需要更多代码。我添加了特定的代码段以获取选定的内联图像并使之非内联-但已注释掉。使用错误处理,可以使代码在两种情况下均可使用。

从您的描述看来,您似乎需要页脚中的图像,并且每页上都有不同的图像。这不是那么简单,但是最终是可行的。这段代码只是将其重新放置在页面本身上。

' TO DO: add error handling. Code assumes that the selection is the image
' If it is not then an exception is thrown

Dim selectedShape As Shape

' If the image is not an inline image
Set selectedShape = ActiveDocument.Shapes(Selection.ShapeRange.Name)

' If the image is an inline image then
' Set selectedShape = Selection.InlineShapes(1).ConvertToShape

With selectedShape
    ' Allow text to wrap around the image
    .WrapFormat.Type = WdWrapType.wdWrapFront
    
    ' Fix the anchor (more stable repositioning)
    .LockAnchor = True
    
    ' Size the picture
    .LockAspectRatio = True
    .Height = Application.InchesToPoints(1)
    
    ' Position the picture - use absolution position relative to page edges
    .RelativeHorizontalPosition = WdRelativeHorizontalPosition.wdRelativeHorizontalPositionPage
    .RelativeVerticalPosition = WdRelativeVerticalPosition.wdRelativeVerticalPositionPage
    .Top = Application.InchesToPoints(10.35)
    .Left = ActiveDocument.PageSetup.PageWidth - Application.InchesToPoints(0.45) - .Width
End With
,

您的要求还不完全清楚,所以这是我的假设:

  1. 您要在文档正文中插入图像,而不是在页脚中插入
  2. 图片需要与左右边缘对齐。

如果这些假设是正确的,则只需进行一些设置即可使用,而无需使用任何代码即可实现所需的功能。

有三种方法可以在该位置添加图片:

  1. 添加浮动图片
  2. 在与左下角对齐的无边界浮动表内添加内嵌图像。
  3. 在段落内添加内嵌图像,该段落的样式与左下角对齐。

可以使用图片内容控件代替图片预先设置最后两个选项,并另存为快速零件/构件。然后,当您需要添加图片时,只需插入快速部件并将图片添加到其中即可。

如果确实需要添加带有特定图像的页脚,也可以通过将页脚保存在页脚库中来简化操作。

编辑: 如果您对编码解决方案感到满意,那么我建议您不要使用代码来解决问题,而要使用它来防止问题,即您使用插入和放置图像的代码。下面的第一个例程将执行此操作。作为奖励,还有一个例程来移动选定的图像。只需将下面的所有代码复制并粘贴到新模块中即可。

Option Explicit

Public Sub InsertPictureBottomLeft()
   Dim location As Range
   Set location = Selection.Range
   
   Dim filename As String
   filename = GetPictureFileName
   If filename = vbNullString Then Exit Sub
   
   Dim picture As Shape
   'add the picture
   Set picture = _
      ActiveDocument.Shapes.AddPicture(filename:=filename,_
      LinkToFile:=False,SaveWithDocument:=True,Anchor:=location)
   LayoutPictureBottomLeft picture
End Sub

Public Sub MoveSelectedPictureBottomLeft()
   Dim picture As Shape

   On Error Resume Next
   Set picture = Selection.ShapeRange(1)
   'if selected picture is InlineShape we get an error
   If Err Then Set picture = Selection.InlineShapes(1).ConvertToShape
   'reset error handling
   On Error GoTo 0
   LayoutPictureBottomLeft picture
End Sub

Private Function GetPictureFileName() As String
   Dim dlgPicture      As Word.Dialog
   'display the picture dialog
   Set dlgPicture = Dialogs(wdDialogInsertPicture)
   With dlgPicture
      .Display
      GetPictureFileName = .Name
   End With
End Function

Private Sub LayoutPictureBottomLeft(picture As Shape)
   With picture
      .LayoutInCell = True
      .LockAspectRatio = msoTrue
      .WrapFormat.Type = wdWrapTopBottom
      .Left = wdShapeLeft
      .RelativeHorizontalPosition = wdRelativeHorizontalPositionMargin
      .Top = wdShapeBottom
      .RelativeVerticalPosition = wdRelativeVerticalPositionMargin
      'for placement relative to page comment out previous 4 lines
      'and uncomment next 4 lines
      '.Left = InchesToPoints(0.45)
      '.RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
      '.Top = InchesToPoints(10.35)
      '.RelativeVerticalPosition = wdRelativeVerticalPositionPage
   End With
End Sub

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。