ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 27473|回复: 42

[分享]如何制作动态链接库(*.dll)文件和WORD中引用动态链接库

[复制链接]

TA的精华主题

TA的得分主题

发表于 2004-11-21 06:18 | 显示全部楼层 |阅读模式
 
目的:通过动态链接库的制作,可以将WORD中的VBA代码进行封装,达到:一,保护代码的目的,避免他人通过简单方法(解密)就能窥知过程代码,进一步保护源作者的代码;二,将较复杂的代码,通过制作成动态链接库,还可以加快代码的运行速度(特别是各程序间的协同作业);三,简单化调用过程,使用活动文档中的代码数量大大降低,有利于初学者进行使用.
以下是在WORD的五个宏(五个过程),分别是:

StandardNumber:功能,对所选数据(文本中或者是表格中的两者之一),进行自动格式化为千分位数据.

CurrencyNumber: 功能,对所选数据(文本中或者是表格中的两者之一),进行自动格式化为人民币的货币格式数据

ScientificNumber: 功能,对所选数据(文本中或者是表格中的两者之一),进行自动格式化为科学记数法.

CalValue:对所选数据进行简单四则混合运算等功能

InsertPercent: ,对所选数据(文本中或者是表格中的两者之一),进行自动补加百分号.

请记住以上五个过程名(宏名)

VBE中代码如下:

Sub StandardNumber()

    Dim i As Range, Acell As Cell, CR As Range, YN As String

    On Error Resume Next

    Application.ScreenUpdating = False

    If Selection.Type = 2 Then

        For Each i In Selection.Words

            If i Like "####*" = True Then

                If i.Next Like "." = True And i.Next(wdWord, 2) Like "#*" = True Then

                    i.SetRange Start:=i.Start, End:=i.Next(wdWord, 2).End

                    i = Format(i, "Standard")

                Else

                    i = Format(i, "Standard")

                End If

            End If

        Next i

    ElseIf Selection.Type = 5 Then

        For Each Acell In Selection.Cells

            Set CR = ActiveDocument.Range(Acell.Range.Start, Acell.Range.End - 1)

            If CR Like "####*" = True Then

                If CR Like "####.#*" = True Then

                    YN = Format(CR, "Standard")

                    CR.Text = YN

                Else

                    YN = Format(CR, "Standard")

                    CR.Text = YN

                End If

            End If

        Next Acell

    Else

        MsgBox "您只能选定文本或者表格之一!", vbOK + vbInformation

    End If

    Application.ScreenUpdating = True

End Sub

Sub CurrencyNumber()

    Dim i As Range, Acell As Cell, CR As Range, YN As String

    On Error Resume Next

    Application.ScreenUpdating = False

    If Selection.Type = 2 Then

        For Each i In Selection.Words

            If i Like "####*" = True Then

                If i.Next Like "." = True And i.Next(wdWord, 2) Like "#*" = True Then

                    i.SetRange Start:=i.Start, End:=i.Next(wdWord, 2).End

                    i = Format(i, "Currency")

                Else

                    i = Format(i, "Currency")

                End If

            End If

        Next i

    ElseIf Selection.Type = 5 Then

        For Each Acell In Selection.Cells

            Set CR = ActiveDocument.Range(Acell.Range.Start, Acell.Range.End - 1)

            If CR Like "####*" = True Then

                If CR Like "####.#*" = True Then

                    YN = Format(CR, "Currency")

                    CR.Text = YN

                Else

                    YN = Format(CR, "Currency")

                    CR.Text = YN

                End If

            End If

        Next Acell

    Else

        MsgBox "您只能选定文本或者表格之一!", vbOK + vbInformation

    End If

    Application.ScreenUpdating = True

End Sub

Sub ScientificNumber()

    Dim i As Range, Acell As Cell, CR As Range, YN As String

    On Error Resume Next

    Application.ScreenUpdating = False

    If Selection.Type = 2 Then

        For Each i In Selection.Words

            If i Like "####*" = True Then

                If i.Next Like "." = True And i.Next(wdWord, 2) Like "#*" = True Then

                    i.SetRange Start:=i.Start, End:=i.Next(wdWord, 2).End

                    i = Format(i, "Scientific") & " "

                Else

                    i = Format(i, "Scientific") & " "

                End If

            End If

        Next i

    ElseIf Selection.Type = 5 Then

        For Each Acell In Selection.Cells

            Set CR = ActiveDocument.Range(Acell.Range.Start, Acell.Range.End - 1)

            If CR Like "####*" = True Then

                If CR Like "####.#*" = True Then

                    YN = Format(CR, "Scientific") & " "

                    CR.Text = YN

                Else

                    YN = Format(CR, "Scientific") & ""

                    CR.Text = YN

                End If

            End If

        Next Acell

    Else

        MsgBox "您只能选定文本或者表格之一!", vbOK + vbInformation

    End If

    Application.ScreenUpdating = True

End Sub

Sub CalValue()

    Dim MyValue As Single

    On Error Resume Next

    If Selection Like "*" & Chr(13) Then Selection.SetRange Start:=Selection.Start, End:=Selection.End - 1

    MyValue = Selection.Calculate

    Selection.InsertAfter IIf(Abs(MyValue) < 1, "=" & Replace(MyValue, ".", "0."), "=" & MyValue)

End Sub

Sub InsertPercent()

    Dim i As Range, MyRange As Range, ER As Long, CR As Range

    On Error Resume Next

    Application.ScreenUpdating = False

    If Selection.Type = 2 Then

        For Each i In Selection.Words

            mi = Trim(i)

            pi = Trim(i.Previous)

            ni = Trim(i.Next)

            If mi Like "*#" = True Then

                If ni <> "." Then

                    i.InsertAfter "%"

                ElseIf pi = "." And ni <> "%" Then i.InsertAfter "%"

                End If

            End If

        Next i

    ElseIf Selection.Type = 5 Then

        For Each Acell In Selection.Cells

            Set CR = ActiveDocument.Range(Acell.Range.Start, Acell.Range.End - 1)

            If CR Like "*#" = True Then

                If CR Like "#*.*#" = True Then

                    CR.InsertAfter "%"

                Else

                    CR.InsertAfter "%"

                End If

            End If

        Next Acell

    Else

        MsgBox "您只能选定文本或者表格之一!", vbOK + vbInformation

    End If

    Application.ScreenUpdating = True

End Sub

[此贴子已经被作者于2004-11-21 15:09:23编辑过]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2004-11-21 06:28 | 显示全部楼层

接上页:

好,我们开始制作动态链接库,打开Microsoft Visual Basic 6.0 中文版程序,在"文件"菜单下点"新建工程",出现是否保存对"工程1"的对话框,选"否",出现如图:

我们将上述代码原原本本粘贴于VB工程1的代码窗口中,并将其右则的属性对话框中的类的名称更改为"MyDll",如图:

然后,在"工程"菜单下点引用:在出现的引用对话框中选取"Microsoft Word 10.0 Object Library",这是关键步骤!

如图:

然后,我们需要对该工程的属性和文件进行定义,点"工程"菜单下的:"工程1属性",按图所示,输入后确认.

好,前道工作基本结束.

接下来,是生成DLL文件,点"文件"菜单下的"生成"WdNumberFormated.dll(K)",出现一个保存对话框,选择并记住这个路径,本例中的DLL文件放在"D:\Test"文件夹下.

好了,我们可以退出VB编辑器,它会询问是否保存下列文件的更改对话框,如果你觉得有必要,可以保存,也可以不保存.

[教学篇]如何制作动态链接库(*.dll)文件和WORD中引用动态链接库

[教学篇]如何制作动态链接库(*.dll)文件和WORD中引用动态链接库

[教学篇]如何制作动态链接库(*.dll)文件和WORD中引用动态链接库

[教学篇]如何制作动态链接库(*.dll)文件和WORD中引用动态链接库

[教学篇]如何制作动态链接库(*.dll)文件和WORD中引用动态链接库

[教学篇]如何制作动态链接库(*.dll)文件和WORD中引用动态链接库

[教学篇]如何制作动态链接库(*.dll)文件和WORD中引用动态链接库

[教学篇]如何制作动态链接库(*.dll)文件和WORD中引用动态链接库

[教学篇]如何制作动态链接库(*.dll)文件和WORD中引用动态链接库

[教学篇]如何制作动态链接库(*.dll)文件和WORD中引用动态链接库

[教学篇]如何制作动态链接库(*.dll)文件和WORD中引用动态链接库

[教学篇]如何制作动态链接库(*.dll)文件和WORD中引用动态链接库

[教学篇]如何制作动态链接库(*.dll)文件和WORD中引用动态链接库

[教学篇]如何制作动态链接库(*.dll)文件和WORD中引用动态链接库

TA的精华主题

TA的得分主题

 楼主| 发表于 2004-11-21 06:30 | 显示全部楼层

接上页:

回到WORD中,我们新建一个空白文档,并保存为"DLLTEST.DOC"文件,进入 VBE中,在左侧的资源管理器中,双击PROJECT(DLLTEST)下的"THISDOCUMENT",出现代码窗口,",点"工具"菜单下的"引用"命令,出现如图所示对话框:

5BOuP4cI.rar (7.98 KB, 下载次数: 252)

TA的精华主题

TA的得分主题

发表于 2004-11-21 11:04 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2004-11-22 19:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

好东西,收藏学习。

顶一下。

TA的精华主题

TA的得分主题

发表于 2004-11-22 22:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
守柔,你知道我不懂VBA,但我相信你做的是好东东,要不你不会那么开心。所以虽然我不懂,但我帮你顶一下,让懂的朋友们能看到、学到、用到。那样才不枉费你那么多心血,你也会更开心的。

TA的精华主题

TA的得分主题

发表于 2004-12-25 23:55 | 显示全部楼层

试做了一个窗体调用,没能成功,不知为何?

上面这些真的是不错的!非常不错!!又有学习的了。试做了一个,对于窗体调用的,一时也说不清楚,只是运行不了,不知为何?附件解压到D盘根目录下即可调用DLL,版主给看看?

如果能有个窗体调用的范例则更好。

版主提供的东西总是最好的!也一定会有更好的!期待……

3SXHzTS8.rar (19.4 KB, 下载次数: 103)

[此贴子已经被作者于2004-12-27 11:52:30编辑过]

TA的精华主题

TA的得分主题

发表于 2004-12-31 17:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
好教程,谢谢版主

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-1-13 06:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

请引用同一路径下的DLL.我想在DLL中应该不能直接调用USERFORM吧,我是用FORM做的.具体也没有考证过.

r4xfPw9h.rar (8 KB, 下载次数: 128)

TA的精华主题

TA的得分主题

发表于 2005-1-13 12:26 | 显示全部楼层

太棒了,回去试试

谢谢板主了

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 18:06 , Processed in 0.042089 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表