1

我正在为报告集构建宏库,但在许多情况下,我在报告中作为示例显示的图像需要调整为以下像素宽度之一:

  • 300像素
  • 400像素
  • 500像素
  • 600像素
  • 700像素

我尝试创建一个宏,通过像素宽度更改每个图像的确切宽度,但它似乎忽略了纵横比并拉伸图像。是否可以使用宏锁定纵横比?

实际上,我想要的只是一个非常短的宏,它将图像的宽度调整 [X] 像素,并且什么都不做 - 但是,与任何其他调整大小的宏一样,我不断得到高度的怪异。

是否有仅按像素宽度调整大小的宏语言?


这是我一直在使用的百分比大小代码示例:

Sub FNG_setsize75percent()
'
' FNG_setsize75percent Macro
'
'
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "^g"
        .Replacement.Text = "^p"
        .Forward = True
        .Wrap = wdFindAsk
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    Dim PercentSize As Integer
     PercentSize = 75
     If Selection.InlineShapes.Count > 0 Then
         Selection.InlineShapes(1).ScaleHeight = PercentSize
         Selection.InlineShapes(1).ScaleWidth = PercentSize
     Else
         Selection.ShapeRange.ScaleHeight Factor:=(PercentSize / 100), _
           RelativeToOriginalSize:=msoCTrue
         Selection.ShapeRange.ScaleWidth Factor:=(PercentSize / 100), _
           RelativeToOriginalSize:=msoCTrue
     End If

    End With
    Selection.InlineShapes(1).LockAspectRatio = msoTrue
End Sub

现在,如果我真的可以使用类似的东西,我的猜测是我可以使用类似的东西:

Sub Img500px
    Selection.InlineShapes(1).LockAspectRatio = msoTrue
    Selection.InlineShapes(1).Width = 375#
    Selection.InlineShapes(1).Height = (Selection.InlineShapes(1).AbsoluteWidth / 375#) * Selection.InlineShapes(1).Height

End Sub

除了一个小问题:它仍然不起作用。

Sub Img500px
    With Selection.Find
        .Text = "^g"
        .Replacement.Text = "^p"
        .Forward = True
        .Wrap = wdFindAsk
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
     Selection.InlineShapes(1).Width = 375#
     Selection.InlineShapes(1).Height = (Selection.InlineShapes(1).Width / 375#) * Selection.InlineShapes(1).Height

     End With
     Selection.InlineShapes(1).LockAspectRatio = msoTrue

End Sub

这也不起作用。

因此,虽然“这是一个简单的数学问题”似乎可以解决它,但它仍然没有按预期工作。

这真的很简单:

500 像素/英寸/任何锁定纵横比,根据纵横比调整高度。

我同意这应该是一个“简单的数学问题”,但代码仍然没有做你应该做的事情。

当然,我可能只使用外部宏程序,而不是再尝试使用它。

4

1 回答 1

2

您可以通过一些数学来保持纵横比固定:

Sub Tester()
    ResizeWidth Selection.InlineShapes(1), 200
End Sub

Sub ResizeWidth(s, newWidth As Double)
    s.Height = (s.Width / newWidth) * s.Height
    s.Width = newWidth
End Sub

编辑:这(设置 LockAspectRatio)也适用于我 - 高度会自动调整。

Sub ResizeWidth(s, newWidth As Double)
    s.LockAspectRatio = msoTrue
    s.Width = newWidth
End Sub
于 2012-04-12T19:53:20.160 回答