クリップボードのbmpデータをダブルクリックで貼り付けて操作マニュアルお手軽作成
'■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
'■
'■ クリップボードのbmpデータをダブルクリックしたセルに、セルサイズに合わせて貼
’■ り付けるイベントマクロ
'■ 操作マニュアルを作るときにプリントスクリーンした画面ショットを次々に貼って
’■いくなど。
'■ 使い方
’■ マクロを埋め込みたいシートオブジェクトに記載する。
'■ ex.スクリーンショット⇒ダブルクリック
'■ ex. ctr+C⇒ダブルクリック
'■
'■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim myPic As Variant
myPic = Application.ClipboardFormats 'クリップボード上のデータを取得
'------------------step1クリップボードが空のとき、終了--------------
If myPic(1) = True Then
MsgBox "クリップボードは空です"
Exit Sub
End If
'------------------step2クリップボードにデータがあるとき------------------
Application.ScreenUpdating = False '画面更新停止
Dim myRange As Range '画像を貼り付けるセル範囲(セル結合してもOK)
Set myRange = Target '画像(myPic)をこのセルの大きさに合わせて縮小する
'縮小作業
Dim rX As Double 'セル幅に合わせるための画像横倍率
Dim rY As Double 'セル高さに合わせるための画像縦倍率
Dim i As Long
For i = 1 To UBound(myPic) '1つのデータが複数形式で保持されることがあるのでbmpを探す(逆引き辞典パーフェクト)
If myPic(1) = xlClipboardFormatBitmap Then
ActiveSheet.Paste
With ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
.Left = myRange.Left
.Height = myRange.Height
rX = myRange.Width / .Width '横倍率
rY = myRange.Height / .Height '縦倍率
'縦横の倍率の小さい方を基準倍率にする。
If rX > rY Then '縦倍率の方が小さいとき
.Height = .Height * rY - 6 '縦を縮める
Else '横倍率の方が小さいとき
.Width = .Width * rX - 6 '横を縮める
End If
'中央に配置
.Top = .Top + (myRange.Height - .Height) / 2 '余白をセル内上下均等に
.Left = .Left + (myRange.Width - .Width) / 2 '余白をセル内左右均等に
End With
Exit For
End If
Next i
Application.ScreenUpdating = True
Cancel = True 'ダブルクリック操作をキャンセル
End Sub
================================================
数式をいじくって計算するのではなく、画像をうまく配置するという今までみてきたのと違うマクロ。こんなマクロも作れるのかと驚いた。
もと画像の縦横比率がこれで維持されるのだが、なぜ維持されるのかがわからない。
参考
ExcelVBA逆引き辞典パーフェクト630(田中亨)