エクセルのマクロ、「InkPicture」です。
ユーザーフォームに、「InkPicture1」「CommandButton1」「CommandButton2」を配置した場合のコードです。
「CommandButton1(決定)」をクリックすると、現在のセルに手書き描画を貼り付けます。
「CommandButton2(消去)」をクリックすると、直前の手書き描画を消去します。
Option Explicit
Private Sub CommandButton1_Click()
' 決定ボタン
Dim myShape As Shape
' 手書き入力されていれば
If InkPicture1.Ink.Strokes.Count > 0 Then
' すべての図形に対し繰り返し
For Each myShape In ActiveSheet.Shapes
' 図形の名前が「手書き」なら
If myShape.Name = "手書き" Then
' 図形を削除
myShape.Delete
End If
Next
' 手書き入力内容をクリップボードにコピー
InkPicture1.Ink.ClipboardCopy
' コピーした内容を貼り付け
ActiveSheet.PasteSpecial
With Selection
' 図形の名前
.Name = "手書き"
' 線なし
.Border.LineStyle = xlLineStyleNone
' 塗りつぶしなし
.Interior.ColorIndex = xlColorIndexNone
' 高さをセルに合わせる
.Height = ActiveCell.MergeArea.Height
' 幅がセルの幅より大きければ
If .Width > ActiveCell.MergeArea.Width Then
' 幅を合わせる
.Width = ActiveCell.MergeArea.Width
End If
' 位置決め
.Top = ActiveCell.MergeArea.Top + (ActiveCell.MergeArea.Height - .Height) / 2
.Left = ActiveCell.MergeArea.Left + (ActiveCell.MergeArea.Width - .Width) / 2
End With
' セルを選択(図形の選択を解除する)
ActiveCell.Select
' ユーザーフォームを開放
Unload Me
End If
End Sub
Private Sub CommandButton2_Click()
' 消去ボタン
With InkPicture1.Ink
' 手書き入力されていれば
If .Strokes.Count > 0 Then
' 直前の描画を消去
.DeleteStroke .Strokes(.Strokes.Count - 1)
' ユーザーフォームを再描画
Me.Repaint
End If
End With
End Sub
Private Sub UserForm_Initialize()
' ユーザーフォームの初期化処理
With InkPicture1.DefaultDrawingAttributes
' ペンの太さ
.Width = 50
' ペンの色
.Color = RGB(0, 0, 0)
End With
' ポインタの形状
InkPicture1.MousePointer = IMP_Crosshair
End Sub