[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『写真貼り付け縦横比解除』(ちーず)
B列のセルにカーソルを合わせ、そのカーソルが選択しているセルに、
コピーしていた写真をペーストし、その写真を縦横比を固定でなく、
縦と横それぞれに縮尺を変えられるように
するコードを作ったのですが、msoFalseにしても、うまくいきません。
どのように修正したらよいですか?
また、本当はB2だけでなく、Bの列のどこの行にカーソルを合わせても
動くようにしたいのですが、、、
ご教授宜しくお願いします。
Sub B列写真貼り付け()
Range("B2").Select
Dim shp As Shape Dim rng As Range
If TypeName(Selection) <> "Range" Then Exit Sub
For Each shp In ActiveSheet.Shapes Set rng = Range(shp.TopLeftCell, shp.BottomRightCell) If Not (Intersect(rng, Selection) Is Nothing) Then shp.ScaleWidth 0.3506469727, msoFalse, msoScaleFromTopLeft End If Next End Sub
< 使用 Excel:Excel2010、使用 OS:Windows7 >
shp.LockAspectRatio = msoFalse (???) 2018/11/05(月) 12:00
(ちーず) 2018/11/05(月) 13:02
ちょっと作ってみました。
Sub B列写真貼り付け()
Dim Shp As Shape Dim Rng As Range Dim ClipB Dim i As Long
Set Rng = ActiveCell If Rng.Column <> 2 Then MsgBox "B列を選択して実行してください", vbCritical Exit Sub End If
ClipB = Application.ClipboardFormats If ClipB(1) = xlClipboardFormatPICT Or ClipB(1) = xlClipboardFormatBitmap Then Rng.PasteSpecial For Each Shp In Selection.ShapeRange Shp.LockAspectRatio = msoFalse Shp.ScaleWidth 0.3506469727, msoFalse, msoScaleFromTopLeft Next Else MsgBox "画像をクリップボードに格納してください。", vbCritical Exit Sub End If
End Sub (ろっくん) 2018/11/05(月) 13:13
あ、ペーストからではないんですね・・。 勘違いしました。 (ろっくん) 2018/11/05(月) 13:18
ろっくんさん、いただいたコードで試してみたのですが
貼りつけた写真はそのまま残ったまま、新たにリサイズされた写真が
B列の右に少しずれたところに写真が作成されてしまいます。
貼りつけた写真はB列の左上に置いたまま
貼りつけた写真をリサイズしたいのですが
どのようにしたらよいのでしょうか。
また、幅は Shp.ScaleWidth 0.3506469727で変更できるのですが
Heightの数字も指定したいのですが、どのようにしたらいいですか?
質問ばかりですみません。
(ちーず) 2018/11/05(月) 13:37
すみません、ちょっと整理させてください。 写真は既に貼り付けてある状態でマクロを実行、でいいですか? 次にセルを選択? 貼り付けてある写真をそのセルにリサイズしてコピー?移動? 写真が複数ある場合はどうするんでしょう?
てっきりクリップボードに写真を格納している状態からスタートかと 思い込んでしまってたので、ちーずさんの意図とズレてしまったかも しれません。。 (ろっくん) 2018/11/05(月) 13:58
連投すみません。 こんな感じでしょうか。
Sub B列写真貼り付け()
Dim Shp As Shape Dim Rng As Range
Set Rng = ActiveCell If Rng.Column <> 2 Then MsgBox "B列を選択して実行してください", vbCritical Exit Sub End If
For i = 1 To ActiveSheet.Shapes.Count Set Shp = ActiveSheet.Shapes(i) Shp.Copy Rng.PasteSpecial For Each Shp In Selection.ShapeRange Shp.LockAspectRatio = msoFalse Shp.ScaleWidth 0.3506469727, msoFalse, msoScaleFromTopLeft Shp.ScaleHeight 0.5, msoFalse, msoScaleFromTopLeftmsoScaleFromTopLeft Next Shp Next
End Sub (ろっくん) 2018/11/05(月) 14:37
説明下手でごめんなさい
>写真は既に貼り付けてある状態でマクロを実行、でいいですか?
はい、そうです。
まず先に、
1・クリップボードの写真をコピーしておいてからエクセルにうつります。
2・貼り付けしたいB列のセルにカーソルを置きます。
貼付けるのは、カーソルを置いたセルです。
3・ctrl+Vで貼付けしたら、縦横比固定でなく、なおかつ横(幅)と縦(高さ)を
個別に数字で指定したサイズで貼り付けられる
↓
同じように、1から3を繰り返し(貼付けしたいところにカーソルを置き、ペーストしたら指定のサイズで貼り付けられる)で、行いたいです。
伝わりずらい文章で大変すみません。
(ちーず) 2018/11/05(月) 15:39
説明文からみると、画像はクリップボードにある状態で、エクセルへ 貼り付け時にサイズ変更、 でしょうか? 画像をctrl+vで貼付したときのイベントの書き方はちょっとわかりませんので代案で・・。
1.画像をクリップボードに格納 2.貼り付け先のB列のセルをダブルクリック
コードを書いておきます。
シートモジュールに Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Shp As Shape Dim ClipB Dim i As Long Dim ClipBObj As Object
ClipB = Application.ClipboardFormats If Target.Column = 2 And ClipB(1) = xlClipboardFormatPICT Or ClipB(1) = xlClipboardFormatBitmap Then Set ClipBObj = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") Target.PasteSpecial For Each Shp In Selection.ShapeRange Shp.LockAspectRatio = msoFalse Shp.ScaleWidth 0.3506469727, msoFalse, msoScaleFromTopLeft Shp.ScaleHeight 0.5, msoFalse, msoScaleFromTopLeftmsoScaleFromTopLeft Next With ClipBObj .SetText "" .PutInClipboard End With Set ClipBObj = Nothing End If
End Sub (ろっくん) 2018/11/05(月) 17:32
大変ずうずうしいお願いなのですが
下記2点もできればお返事もらえるとうれしいです
■元の写真の大きさから拡縮率でサイズ入力していますが
元の写真サイズに関係なく、指定したサイズに収める(縦と横両方)にしたい
■写真のプレビュー画面(大アイコンや特大アイコンなど)のサムネイルをコピーしても
貼りつけることってできるのでしょうか?
今のクリップボードから貼り付けの仕様はそのままに、サムネイルからコピーしても貼りつくようにしたいのです(T_T)
(ちーず) 2018/11/06(火) 11:17
.ScaleWidthと.ScaleHeightは元サイズからの拡縮率を指定するものです。 サイズを直に指定する場合は.Widthと.Heightプロパティに値をポイントで指定します。
サムネイルのコピーからの貼付については私はできません。 代案ですが、B列をダブルクリック時にクリップボードに画像が格納されている場合は そのまま貼付、クリップボードに画像が格納されていない場合は画像を選択する ダイアログから画像を選択する、というのはどうでしょう。 画像の幅と高さは任意で変えてください。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Const ShpWidth = 150 '幅 Const ShpHeight = 100 '高さ
Dim Shp As Shape Dim ClipB Dim i As Long Dim ClipBObj As Object Dim PictF
ClipB = Application.ClipboardFormats If Target.Column = 2 And ClipB(1) = xlClipboardFormatPICT Or ClipB(1) = xlClipboardFormatBitmap Then Set ClipBObj = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") Target.PasteSpecial With ClipBObj .SetText "" .PutInClipboard End With Set ClipBObj = Nothing ElseIf Target.Column = 2 Then PictF = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.gif;*.tif;*.png;*.bmp") If VarType(PictF) = vbBoolean Then Cancel = True Exit Sub End If ActiveSheet.Pictures.Insert(PictF).Select Cancel = True End If For Each Shp In Selection.ShapeRange Shp.LockAspectRatio = False Shp.Width = ShpWidth Shp.Height = ShpHeight Next
End Sub (ろっくん) 2018/11/06(火) 12:55
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.