【问题标题】:Keep Picture Ratio in Word File在 Word 文件中保持图片比例
【发布时间】:2021-07-09 08:06:01
【问题描述】:

我通过 VBA 在 Word 文档的左页眉单元格中添加了一张图片 - 使用以下代码可以正常工作。现在我想保持图片的比例,但想改变大小,我不知道怎么做:

Sub AutoOpen()

Dim dd1 As Document: Set dd1 = ActiveDocument
Dim rng1 As Range, seC As Section, an(2) As Long
Dim rngO As Range, rngAN As Range
Dim strToPict As String
    
For Each rngO In dd1.StoryRanges

ActiveDocument.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader

If rngO.StoryType = wdEvenPagesHeaderStory Then
Set rng1 = rngO.Duplicate
For Each seC In rng1.Sections
    an(0) = seC.Headers(1).Range.InlineShapes(1).Height
    an(1) = seC.Headers(1).Range.InlineShapes(1).Width
    Set rngAN = seC.Headers(1).Range.InlineShapes(1).Range.Duplicate
    seC.Headers(1).Range.InlineShapes(1).Delete
    seC.Headers(1).Range.InlineShapes.AddPicture FileName:=strToPict, _
    LinkToFile:=False, SaveWithDocument:=True, Range:=rngAN

        With seC.Headers(1).Range.InlineShapes(1)
         .Height = 50
         .LockAspectRatio = True
        
        End With
Next

Dim i As Long

ActiveDocument.Save
'Footer changing'
For i = 1 To ActiveDocument.Sections.Count
    With ActiveDocument.Sections(i)
        .Footers(wdHeaderFooterPrimary).Range.Text = ActiveDocument.Name + "Text"
    End With
Next

End If

Next
 
End Sub

编辑:我发布了 Makro 的全部代码。

【问题讨论】:

    标签: vba image ms-word


    【解决方案1】:

    «我通过 VBA 在 Word 文档的左页眉单元格中添加图片»。 Word 文档中没有“左页眉单元格”之类的东西。 Word 仅有的页眉(和页脚)是主页、首页和偶数页。

    而且,正如 Timothy 所说,您“真的需要学会使用触手可及的工具”。此外,在找到 LockAspectRatio 后,一个简单的网络搜索(如果真的有必要的话)将向您展示如何使用它。

    在任何情况下,由于您似乎想要做的只是调整 inlineshape 的大小并重复主页面标题,您可以使用以下内容:

    Sub AutoOpen()
    Application.ScreenUpdating = False
    Dim Rng As Range, iShp As InlineShape, Sctn As Section, StrNm As String
    With Dialogs(wdDialogInsertPicture)
      .Display
      StrNm = .Name
    End With
    With ActiveDocument
      If StrNm <> "" Then
        Set Rng = .Sections.First.Headers(wdHeaderFooterPrimary).Range.Tables(1).Cell(1, 1).Range
        Set iShp = .InlineShapes.AddPicture(FileName:=StrNm, _
          LinkToFile:=False, SaveWithDocument:=True, Range:=Rng)
        With iShp
          .LockAspectRatio = True
          .Height = 50
        End With
      End If
      Set Rng = .Sections.First.Footers(wdHeaderFooterPrimary).Range
      .Fields.Add Range:=Rng, Type:=wdFieldEmpty, Text:="FILENAME", PreserveFormatting:=False
      Rng.InsertAfter vbTab & "Text"
      For Each Sctn In .Sections
        Sctn.Headers(wdHeaderFooterPrimary).LinkToPrevious = True
        Sctn.Footers(wdHeaderFooterPrimary).LinkToPrevious = True
      Next
    End With
    Application.ScreenUpdating = True
    End Sub
    

    【讨论】:

    • 我尝试了 '.LockAspectRatio = True' 但它不会按比例缩放图像。我找不到问题。 “左标题单元格”是指标题中表格中的左单元格,但这不是问题所在。那么你能在我的例子中告诉我把“LockAspectRatio”放在哪里吗?非常感谢。
    • 哦,相信我研究了你的代码;)我在“With seC.Headers(1).Range.InlineShapes(1)”下面插入了“.LockAspectRatio = True”,但它修改了比率不要保留它。所以请成为我的导师,并在我上面的具体示例中展示它:)
    • 这正是正确的地方。但是,如果您已经弄乱了纵横比,那么现在添加 '.LockAspectRatio = True' 并不能解决任何问题。
    • 好的。可能是“rngO.Duplicate”是问题吗?它会将比率设置复制到吗?
    • 'Set rng1 = rngO.Duplicate' 所做的只是将范围对象指向 rngO 的副本。它对该范围的内容没有影响。由于您没有发布足够多的代码供任何人使用,甚至没有告诉我们 rngO.StoryType 引用的偶数页眉中的内容,因此我们知道发生了什么,因此不可能更具体。
    【解决方案2】:

    您确实需要学习使用触手可及的工具 - IntelliSense、对象浏览器和在线帮助。

    滚动浏览 IntelliSense 为您提供的选项,或在对象浏览器中查找 InlineShape,您会找到 LockAspectRatio。如果您不确定这是否是您所需要的,按F1 会将您转到online help

    【讨论】:

    • 我已经找到了“LockAspectRatio”,但每次都会出错。我必须在哪里插入它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 2014-10-11
    • 2023-01-13
    • 2020-08-04
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多