墨水工具 - VBA - Excel数字签名/绘图

时间:2016-05-11 13:55:39

标签: vba excel-vba excel

我想在我的一些公司表格中添加手写数字签名。目标非常简单,选择一个文档,添加签名(通过使用绘图板,可以使用Excel's Ink Tools完成)并将文件作为PDF存储在服务器中。这样可以减少打印的必要性,然后再扫描表单以获得签名。

我正在使用excel作为文件操作和搜索的主界面,但遗憾的是我无法找到任何通过VBA使用Excel - Ink Tools的参考/库。

你能指点我找到一些参考资料或一个关于如何在VBA中启动Ink Tools对象的简单片段吗?或者我是否必须使用其他软件才能获得签名?

先谢谢。

米格尔

编辑了我自己的答案,更新了如何使用Userform在Excel中插入签名图像

2 个答案:

答案 0 :(得分:5)

更新:

嗨,大家好,

在@Macro Man向我指出了正确的方向后,我发现了一些有助于启动和运行电子签名的材料。

我在MSDN Digital Ink Signatures - Concepts and Technologies InkPicture Class 上发现了一些关于VB.net和C#上的Ink集合的材料通过PictureBox / Userform,这与另一个Stackoverflow response中的InkEdit控件相结合,在其中我意识到VGA工具箱有一个InkPicture Control附加控件,可用于通过用户表单收集手写电子签名。

请逐步查看以下内容:

在VBAs工具箱中,在工具>下进行额外控制其他控件有InkPicture控件,允许您创建签名用户表单。

enter image description here

添加后,InkPicture可用作工具箱上的任何其他控件。

enter image description here

然后是为Signature请求初始化UserForm的情况。我使用绘图板,但其他硬件也可以使用。

enter image description here

在需要时存储或使用生成的图像,在我的情况下,在服务器中保存临时版本,然后调整大小并添加到Word文档。

修改

here中回答类似的问题之后,关于如何使用Userform InkPicture将图像签名输入到工作表/特定单元格中,我想我会为那些感兴趣的人编辑这个答案。

以下代码将允许您打开用户窗体,以便用户可以对墨迹字段进行签名,温和地保存图像,将InkPicture添加到工作表中并终止临时图像。

设置UserForm(我的设置如此,有一些额外的选项)UserForm名为Signature_pad,您需要的基本选项是Private Sub Use_Click()

enter image description here

这是Userform中的代码:

Private Sub Use_Click()

    'dim object type and byte array to save from binary
    Dim objInk As MSINKAUTLib.InkPicture
    Dim bytArr() As Byte
    Dim File1 As String

    'get temp file path as $user\Temp\[file name]
    FilePath = Environ$("temp") & "\" & "Signature.png"

    ' set objInk as image/strokes of InkPicture control form object
    Set objInk = Me.SignPicture

    'if object is not empty
    If objInk.Ink.Strokes.Count > 0 Then
        'get bytes from object save
        bytArr = objInk.Ink.Save(2)
        'create file for output
        Open FilePath For Binary As #1
        'output/write bytArr into #1/created (empty)file
        Put #1, , bytArr
        Close #1
    End If

    'set public File as file path to be used later on main sub
    Signature.File = FilePath

    Unload Me
End Sub

Private Sub Cancel_Click()
    End
End Sub

Private Sub ClearPad_Click()
    'delete strokes/lines of signature
    Me.SignPicture.Ink.DeleteStrokes
    'refresh form
    Me.Repaint
End Sub

以下是调用用户表单并处理签名的Main sub(称为Signature的模块),您可以使用Sub调用此button或另一个{Sub 1}}。

'public temp file path
Public File
Sub collect_signature()

    'Dim and call userform
    Dim myUserForm As Signature_pad

    Set myUserForm = New Signature_pad
    myUserForm.Show
    Set myUserForm = Nothing

    'insert image/signature from temp file into application active sheet
    Set SignatureImage = Application.ActiveSheet.Shapes.AddPicture(File, False, True, 1, 1, 1, 1)

    'scale image/signature
    SignatureImage.ScaleHeight 1, True
    SignatureImage.ScaleWidth 1, True

    'image/signature position
    SignatureImage.Top = Range("A1").Top
    SignatureImage.Left = Range("A1").Left

    'delete temp file
    Kill File

End Sub

请务必重命名Userform NameButtons Name或代码以匹配您buttons的名称。

答案 1 :(得分:3)

你之后的InkEdit控件吗?

这是您可以在工具 - >参考文献

中找到的标准库之一

References window showing InkEdit library