Coppy các nét vẻ vào trang tính InkPicture, sử dụng điều khiển InkPicture cung cấp khả năng đặt một hình ảnh trong một ứng dụng và cho phép người dùng vẽ mực lên trên nó. Nó dành cho các trường hợp trong đó mực không được nhận dạng là văn bản mà thay vào đó được lưu trữ dưới nét bút.
Coppy các nét vẻ vào trang tính InkPicture

Bạn có thể sử dụng điều khiển InkPicture để hiển thị mực trong Microsoft Windows 2000, Windows Server 2003, bất kỳ phiên bản nào của Windows XP ngoài Windows XP Tablet PC Edition và bất kỳ phiên bản nào của Windows Vista.
Tuy nhiên, bạn có thể nhập mực, chấp nhận cử chỉ hoặc chỉ nhận dạng chữ viết tay trong các điều kiện. Bạn có thể tham khảo đoạn code sau
Để sử dụng được Control Microsoft lnk Picture Control : Click chuột phải vào bản toolbox chọn Microsoft lnk Picture Control

Tạo điều khiển InkPicture đằng sau điều khiển trong suốt (chẳng hạn như GroupBox với bộ thuộc tính WS_EX_TRANSPARENT) sẽ ngăn InkPicture thu thập mực.
Mực có thể được nhập và nhận dạng nếu Windows Vista hoặc XP Tablet PC Edition 2005 được cài đặt. Cử chỉ cũng có thể được nhận ra. Chữ viết tay có thể được nhận dạng dưới dạng văn bản nếu chữ viết tay bắt nguồn từ các máy chạy phiên bản Windows cũ hơn, miễn là có trình nhận dạng.
Nếu bạn sử dụng Windows 2000, Windows Server 2003, bất kỳ phiên bản nào của Windows XP ngoài Windows XP Tablet PC Edition 2005, bạn có thể gán giá trị cho các thuộc tính môi trường xung quanh của điều khiển InkPicture.
Sau đó sao chép và dán mực vào các ứng dụng khác. Tuy nhiên, giá trị của thuộc tính InkEnabled sẽ luôn là FALSE .

I.CODE Coppy các nét vẻ vào trang tính InkPicture
Option Explicit
Private Type uPicDesc
Size As Long
Type As Long
#If VBA7 Then
hPic As LongPtr
hPal As LongPtr
#Else
hPic As Long
hPal As Long
#End If
End Type
Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End Type
#If VBA7 Then
Private Declare PtrSafe Function OleCreatePictureIndirectAut Lib "oleAut32.dll" Alias "OleCreatePictureIndirect" (PicDesc As uPicDesc, RefIID As GUID, ByVal fPictureOwnsHandle As Long, iPic As IPicture) As Long
Private Declare PtrSafe Function OleCreatePictureIndirectPro Lib "olepro32.dll" Alias "OleCreatePictureIndirect" (PicDesc As uPicDesc, RefIID As GUID, ByVal fPictureOwnsHandle As Long, iPic As IPicture) As Long
Private Declare PtrSafe Function CopyImage Lib "user32" (ByVal handle As LongPtr, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As LongPtr
Private Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hwnd As LongPtr) As Long
Private Declare PtrSafe Function CloseClipboard Lib "user32" () As Long
Private Declare PtrSafe Function EmptyClipboard Lib "user32" () As Long
Private Declare PtrSafe Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As LongPtr
Private Declare PtrSafe Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As LongPtr
Private Declare PtrSafe Function FreeLibrary Lib "kernel32" (ByVal hLibModule As LongPtr) As Long
Private hCopy As LongPtr, hPtr As LongPtr, hLib As LongPtr
#Else
Private Declare Function OleCreatePictureIndirectAut Lib "oleAut32.dll" Alias "OleCreatePictureIndirect" (PicDesc As uPicDesc, RefIID As GUID, ByVal fPictureOwnsHandle As Long, iPic As IPicture) As Long
Private Declare Function OleCreatePictureIndirectPro Lib "olepro32.dll" Alias "OleCreatePictureIndirect" (PicDesc As uPicDesc, RefIID As GUID, ByVal fPictureOwnsHandle As Long, iPic As IPicture) As Long
Private Declare Function CopyImage Lib "user32" (ByVal handle As Long, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private hCopy As Long, hPtr As Long, hLib As Long
#End If
Private Const IMAGE_BITMAP = 0
Private Const PICTYPE_BITMAP = 1
Private Const LR_COPYRETURNORG = &H4
Private Const CF_BITMAP = 2
Private Const S_OK = 0
Private oInitPic As IPicture
Private oCurrentShape As Object
Private Sub UserForm_Initialize()
InkPicture1.DefaultDrawingAttributes.Color = vbRed
Set oInitPic = CreatePicture(Me.InkPicture1)
End Sub
'Private Sub UserForm_Terminate()
' If Not oCurrentShape Is Nothing Then oCurrentShape.Delete
'End Sub
Private Sub Cmd_CopyToSheet_Click()
If Me.InkPicture1.Ink.Strokes.Count Then
Me.InkPicture1.Ink.ClipboardCopy
Range("B2").PasteSpecial xlPasteAll
Set oCurrentShape = Selection
oCurrentShape.TopLeftCell.Select
Me.InkPicture1.Ink.DeleteStrokes
Else
If Not oCurrentShape Is Nothing Then
Set Me.InkPicture1.Picture = oInitPic
oCurrentShape.Visible = True
End If
End If
Me.InkPicture1.AutoRedraw = True
End Sub
Private Function CreatePicture(ByVal Shape As Object) As IPicture
Dim IID_IDispatch As GUID, uPicinfo As uPicDesc
Dim iPic As IPicture, lRet As Long
On Error GoTo errHandler
Shape.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
OpenClipboard 0
hPtr = GetClipboardData(CF_BITMAP)
hCopy = CopyImage(hPtr, IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG)
With IID_IDispatch
.Data1 = &H20400
.Data4(0) = &HC0
.Data4(7) = &H46
End With
With uPicinfo
.Size = Len(uPicinfo)
.Type = PICTYPE_BITMAP
.hPic = hCopy
.hPal = 0
End With
hLib = LoadLibrary("oleAut32.dll")
If hLib Then
lRet = OleCreatePictureIndirectAut(uPicinfo, IID_IDispatch, True, iPic)
Else
lRet = OleCreatePictureIndirectPro(uPicinfo, IID_IDispatch, True, iPic)
End If
FreeLibrary hLib
If lRet = S_OK Then
Set CreatePicture = iPic
End If
errHandler:
EmptyClipboard
CloseClipboard
Kết thúc chức năng
II. DOWN FILE Coppy các nét vẻ vào trang tính InkPicture
CLICK VÀO ĐÂY ĐỂ TAI FILE DEMO
Bạn có thê thêm các thủ thuật khác ở đây
Cho phép nhập liệu số trong TEXTBOX

Bật mí 2 cách đánh số trang trong excel nhanh, gọn, lẹ không thể không biết
Hướng dẫn tạo và sử dụng bộ lọc Filter trong Excel 2019 – Thủ thuật Excel 05
Khám Phá Biểu Đồ Mini Sparklines Trong Excel 2019 – Thủ Thuật Excel 02
Tạo Đường Kẻ Chéo Trong Ô Excel 2019 – Thủ Thuật Excel 01
Đánh Số Thứ Tự Tự Động Trong Excel 2019 – Thủ Thuật Excel 03
Cách sửa Lỗi value trong Excel cực kỳ đơn giản, hiệu quả 100%
Sửa lỗi không mở được File Excel với 6 cách đơn giản nhất
Cách sử dụng Hàm Address để lấy giá trị ô đơn giản nhất