问题描述
我是一位科学作家。有时我在大型文档中有重复的任务,每天有很多文档。一个任务是在每页中插入一张图像(不同页面使用不同的图像),然后将图像放置在页面的左下方(页面右侧的.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
,
您的要求还不完全清楚,所以这是我的假设:
- 您要在文档正文中插入图像,而不是在页脚中插入
- 图片需要与左右边缘对齐。
如果这些假设是正确的,则只需进行一些设置即可使用,而无需使用任何代码即可实现所需的功能。
有三种方法可以在该位置添加图片:
- 添加浮动图片
- 在与左下角对齐的无边界浮动表内添加内嵌图像。
- 在段落内添加内嵌图像,该段落的样式与左下角对齐。
可以使用图片内容控件代替图片预先设置最后两个选项,并另存为快速零件/构件。然后,当您需要添加图片时,只需插入快速部件并将图片添加到其中即可。
如果确实需要添加带有特定图像的页脚,也可以通过将页脚保存在页脚库中来简化操作。
编辑: 如果您对编码解决方案感到满意,那么我建议您不要使用代码来解决问题,而要使用它来防止问题,即您使用插入和放置图像的代码。下面的第一个例程将执行此操作。作为奖励,还有一个例程来移动选定的图像。只需将下面的所有代码复制并粘贴到新模块中即可。
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