|
▼kanabun さん:
改訂版、ありがとうございます!!2010でうまく行きました!
イメージしていた通りの作業が、可能になりました。大変勉強になりました。
続けての質問で恐縮なのですが、写真のサイズを指定するコードの書き方がわかれば、ご教授いただけませんでしょうか?
改定版の、「'画像を挿入」「'セルの中央(横方向/縦方向の中央)に配置」のぶ宇文について、
・挿入する写真のサイズを「縦60mmに変更」、「横80mmに変更」もしくは「横は縦の縮小と同じ倍率に縮小」
・挿入するセルの中央に配置
以上のコードについて、可能であればご教授ください。
よろしくお願いいたします。
>▼wen さん:すみません。
>Excel2010 上で動かしてみておっしゃってることが呑み込めました。
>
>>ただ、貼り込まれた写真がどうもサイズがうまくいきません。
>
>>'画像を挿入
>> With ActiveSheet.Pictures.Insert(PicFile)
>> rX = Target.Width / .Width
>> rY = Target.Height / .Height
>> If rX > rY Then
>> ratio = rY
>> Else
>> ratio = rX
>> End If
>> .Width = .Width * ratio
>> .Height = .Height * ratio
>>
>>の部分をどのように書き換えたらいいのかわかりません。
>
>ステップ実行(トレース)していきますと、
>
> (たとえば ratio が 0.5 だったとします)
>
>こちらの【2003】 では
>> .Width = .Width * ratio
>を実行すると、横方向だけ 1/2 に縮小され、一時的に ひしゃげた
>図になります。
>そして
>> .Height = .Height * ratio
>を実行して、高さも 1/2に縮小され、元の縦横比が維持された図に
>縮小されます。
>
>ところが【2010】では、そうならないんですね!
>
>> .Width = .Width * ratio
>を実行すると、Widthはもちろん高さも 1/2 に縮小されます。
>そして
>> .Height = .Height * ratio
>を実行すると、1/2に縮小された図が 【さらに 1/2】に縮小され、
>とてつもなく小さな図になってしまいました!!
>
>おそらく、この不具合をおっしゃってたのだろうと解せました。
>
>改訂版です
>
>
>Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
> Cancel As Boolean)
> Dim PicFile As Variant
> Dim rX#, rY#, Ratio# ' (ratioX, ratioY, ratio)
> Dim L#, T#, W#, H# '(Left, Top, Width, Height)
>
> '[ファイルを開く]ダイアログボックスを表示
> PicFile = Application.GetOpenFilename( _
> "画像ファイル,*.jpg;*.jpeg;*.gif;*.tif;*.png;*.bmp")
> If VarType(PicFile) = vbBoolean Then Cancel = True: Exit Sub
>
>
> Application.ScreenUpdating = False
>
> '画像を挿入
> With ActiveSheet.Pictures.Insert(PicFile)
> W = .Width
> H = .Height
> rX = Target.Width / W
> rY = Target.Height / H
> If rX > rY Then
> Ratio = rY
> Else
> Ratio = rX
> End If
> .Width = W * Ratio
> .Height = H * Ratio
>
> 'セルの中央(横方向/縦方向の中央)に配置
> L = Target.Left + (Target.Width - .Width) / 2
> T = Target.Top + (Target.Height - .Height) / 2
>
> Dim is2010 As Boolean
> is2010 = Val(Application.Version) > 13
> is2010 = True
> If is2010 Then 'ver14 = XL2010
> .CopyPicture 'クリップボードに画像コピー
> .Delete 'いったん削除
> Else
> .Left = L
> .Top = T
> End If
> End With
> If is2010 Then
> Target.Activate
> ActiveSheet.Paste
> With Selection
> .Left = L
> .Top = T
> End With
> End If
> Application.ScreenUpdating = True
> Cancel = True
>End Sub
|
|