1

レポート セット用のマクロ ライブラリを作成していますが、多くの場合、レポートに例として示す画像は、次のいずれかのピクセル幅にサイズ変更する必要があります。

  • 300px
  • 400px
  • 500px
  • 600px
  • 700px

各画像の正確な幅をピクセル幅で変更するマクロを作成してみましたが、縦横比を無視して画像を引き伸ばすようです。マクロでアスペクト比をロックすることはできますか?

現実的に私が欲しいのは、画像の幅を [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

1 つの小さな問題を除いて: まだ動作しません。

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 に答える