dポイントプレゼントキャンペーン実施中!

お世話になります。

工事写真を("工事写真台紙")シートに挿入するVBAを組みました。
アクティブセルの Left Top と写真の Left Top を合わせて
所定の位置に貼り付ける事が出来ています。

ところが1つ問題が出てきました。
デジカメを横(右90度)にして撮影した写真(縦長の写真)を貼り付ける必要が出てきたので
VBAで貼り付ける際、Rotation = 90# で回転させましたが
アクティブセルの Left Top と写真の Left Top を合わせても
セルと写真の左上は合いません。

写真を回転させても、位置情報としての写真の Left Top は変らないみたいです。
見た目の左上を合わす事が出来ません。

座標を取得すれば・・?sin.cos.tan・・?
セルの width と 写真の width・・?
Increment で移動して・・?

煮詰まってどうにもなりません。
どなたかご教授下さい。

A 回答 (2件)

考え方: 正方形なら90度回転させても、各頂点の位置は同じ位置です。


     座表計算は不要です。

Sub Sample()
  
  Dim sngBackup As Single
 
  Application.Dialogs(xlDialogInsertPicture).Show
  With Selection.ShapeRange
    '位置決め
    .Top = ActiveCell.Top
    .Left = ActiveCell.Left
    '横サイズを変数に保持
    sngBackup = .Width
    'アスペクト比を保たないに変更
    .LockAspectRatio = msoFalse
    '正方形にしてしまう-->90度回転しても頂点は同じ位置にある
    .Width = .Height
    '90度回転
    .Rotation = 90#
    '元のサイズに戻す
    .Width = sngBackup
    'アスペクト比を保つに戻す
    .LockAspectRatio = msoTrue
  End With

End Sub

# マクロ(VBA)のご質問で、既存コードがある場合はコードを提示した方が
# 良いと思います。殊にプログラムについては、それが質問者と回答者の間で
# 一番誤解が無く情報が伝わり、質問者にとっては素早い回答が期待できるし、
# 回答者にとっても既存コードのコピペで動作チェックできて楽だからです。

この回答への補足

補足をお礼の後に書きますが、左回転の件も解決しました。
下記コード追記しました。

.Top = .Top + (BackupW - .Height)

KenKen Sp さんのコードが参考になりました。
有難うございました。

補足日時:2006/06/09 11:29
    • good
    • 0
この回答へのお礼

KenKen SPさん ご回答有難うございます。
>正方形にしてしまう
なるほど!の発想です。
考えが及びませんでした。

Sub ボタンクリック()
Dim BackupW As Single
If TypeName(Selection) = "Picture" Then

With Selection.ShapeRange
BackupW = .Width
.LockAspectRatio = msoFalse
.Width = .Height
.Rotation = 90#
.Width = BackupW
.LockAspectRatio = msoTrue
End With
Else
MsgBox "回転させる写真を選択して下さい。", vbOKOnly, "[ 右90度回転 ]"
End If
End Sub

ご回答のコードで右回転解決しました。有難うございました。

欲を言って、左回転の場合は( .Rotation = -90# )
写真の(見た目の)左上位置とセルTop が合わなくなりますが
どこに注目してコード追記すれば良いでしょうか?
やはり写真のTop座標を求めて、セルTop に合わせるのか・・
別の質問みたいですみません。

お礼日時:2006/06/09 11:06

こんにちは。

KenKen_SP です。

写真の貼り付け部分のソースコードを提示して下さい。方法はあると思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A