VBAdnf封装可以封几次封的时候要修改那些东西

热门日志推荐
人人最热标签
分享这篇日志的人常去
北京千橡网景科技发展有限公司:
文网文[号··京公网安备号·甲测资字
文化部监督电子邮箱:wlwh@··
文明办网文明上网举报电话: 举报邮箱:&&&&&&&&&&&&
请输入手机号,完成注册
请输入验证码
密码必须由6-20个字符组成
下载人人客户端
品评校花校草,体验校园广场都知道VBA的代码保护形同虚设用,此方法来保护VBA代码无疑是最简单有效的方法。..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
封装VBA代码
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口vba封装 用VB做做成DLL文件无法调用。但是VBA里使用正常_百度知道
vba封装 用VB做做成DLL文件无法调用。但是VBA里使用正常
Sub 保存() strFileName = Application.GetSaveAsFilename(Sheets(&数据&).Range(&B5&).Value, &格式,*.xlsx&, , &保存当前图表为&)If strFileN缉福光凰叱好癸瞳含困ame = &False& Then: Exit Sub
ActiveWorkbook.SaveAs strFileName, 51End Sub--------------------------------------------------------Sub test()
Dim kk As New CC1
Set kk = NothingEnd Sub
提问者采纳
存储空间必须连续,且各元素的存储顺序是任意的B)存储空间不一定是连缉福光凰叱好癸瞳含困续,且各元素的存储顺序是任意的C存储空间必须连续,且前件元素一定存储在后件元素的前面E) 存储空间不一定连续,且前件元素一定存储在后件元素的前面
其他类似问题
dll文件的相关知识
其他2条回答
那就给这4个参数都赋值。
怎么调用的没说
Sub test()
Dim kk As New CC1
Set kk = NothingEnd Sub调用VBA
等待您来回答
为您推荐:
下载知道APP
随时随地咨询
出门在外也不愁您现在的位置: &
将VBA代码编译封装成为DLL动态链接库的方法
将VBA代码编译封装成为DLL动态链接库的方法
  一、为什么要编译成为DLL
  我们知道,Visual C++、Visual Basic和C++
Builder以及Delphi等编译器所编译出来的程序不容易被人破解(相对来说),这是因为代码被编译成了可执行文件或者动态链接库文件。那么,我们是否可以将VBA代码封装到动态链接库文件中,然后用Word调用呢?回答是肯定的。而且这样做还有一个好处,即可以加快代码的运行速度。
  二、将VBA代码封装成动态链接库
  假如我们已经写好了一个VBA工程,而且运行无误。
  ①建立VB工程及一般性操作
  首先,我们需要两种工具,其中当然包括Microsoft Word,另外一种是Microsoft Basic 6.0。
  打开Microsoft Basic 6.0,在&新建工程&中选取&ActiveX
DLL&,新建一个工程。在属性窗口中将工程名改为VBAPrj,类模块名改为VBACls。然后在&工程&菜单下打开&引用&,选取&Microsoft Office
11.0 Object Library&&&这一步很是关键,切不可遗漏,然后保存工程。下面我们所做的是向工程内添加代码。
  将VBA工程中的一个名为Test过程的代码选定后复制,然后切换到VB编辑器,选中VB的工程管理器中的类模块VBACls,将代码粘贴至代码编辑窗口中,于是这段代码便成了类模块VBACls一个方法,然后将工程编译生成dll文件(如果编译成功的话)。在Word中,我们就可以通过类模块VBACls建立的对象来调用此方法(具体怎么调用,我们将后面介绍)。当然,我们可以继续向工程里添加代码。
  ②修改代码
  虽然VBA源于VB,但是两者毕竟存在着一些差异。因此,需要对转移到VB中的VBA代码做一些必要的修改。
  A、修改VBA代码中所特有类型的对象
  如果我们所添加的代码里有VBA所特有类型&&如Document、Rang、BookMark等所建立的对象,编译时会提示错误,因为VB不能够识别这些对象。此时修改的方法是,将这些对象作为过程或函数的参数进行传递。需要注意的是,这些参数的类型都一律设为Object。
  例如,我们在过程Test中要访问对象ThisDocument,但是VB无法识别ThisDocument,于是我们就为过程test添加一个参数Doc来传递ThisDocument,即Test可定义为Test(Doc
As Object)。
  B、修改VBA所特有一般变量
  VB也无法识别VBA特有的一般变量,如ProtectType,同样,我们也将其作为过程后函数的参数进行传递,不过其类型名都一律设为Variant。
  C、修改VBA所特有常量
  如果在VBA代码中出现了这样的语句:
  ProtectionType = wdNoProtection
  很明显,wdNoProtection是Word所独有的常量,不为VB所能识别,因而无法通过编译。怎样解决这个问题呢?当然,我们可以用修改变量的方法予以修改。但是聪明的读者会想到:如果我们知道了wdNoProtection的值,就可以直接将值赋给ProtectionType。但是接下来的一个问题是:我们怎样才能获得wdNoProtection的值呢?方法很简单,就是让Word&开口&告诉我们。
  在Word一个事件中添加以下语句:
  MsgBox CStr (wdNoProtection)
  其中CStr是类型转换函数,返回参数相应的字符串。只要在Word中触发此事件,会弹出一个对话窗,显示&-1&,这就是Word所告诉我们的:wdNoProtection
的值是-1。于是我们就可以将语句 ProtectionType = wdNoProtection 改为 ProtectionType =
-1,问题到此就迎刃而解了。
  三、封装用户窗体
  我们也可以将用户窗体封装到动态链接库文件里。首先打开Word的VBA编辑器,选中工程资源管理器中的用户窗体,点击右键,选择&导出文件&,选定路径后,将窗体文件保存。然后切换到VB编辑器,在&工程&菜单中选择&添加文件&命令,添加保存的窗体文件。添加结束后,我们会发现VB编辑器中的工程资源管理器中的设计器出现了刚添加的窗体名,选中后双击,在窗体编辑器中就会显现所添加的用户窗体。
  到了这里,读者会问:窗体还有代码呢,怎么办?先别急,试一试下面的操作,你就会明白,问题早已不再是问题了。选中工程资源管理器中的用户窗体,点击右键,选择&查看代码&,你就会高兴发现,在代码编辑框中出现了窗体所对应的代码。原来,在我们导入窗体文件的同时也导入了窗体的代码!当然高兴之余,不要忘了还要对这些代码按照我们上述的方法进行必要修改,以保证代码顺利地通过编译。这样Word就可以通过类模块VBACls间接地调用窗体。
  四、在Word中引用动态链接库
  假如经过我们编译已生成了一个动态链接库文件VBAPrj.dll,其中有一类模块VBACls,此类模块有一个方法Test(Doc As
  接下来我们所要做的是用Word调用Test,有三种方法可供选择:
  1.打开Word的VBA编辑器中ThisDocument代码窗口,点&工具&菜单下的&引用&命令,在引用对话框中引用该动态链接库。
  调用代码如下:
  Dim VBACls As New VBAPrj.VBACls
  VBACls.Test(ThisDocument)
  2.如果知道该动态链接库文件的位置,可以在ThisDocument代码窗口以代码形式引用, 代码如下:
  Private Sub Document_Open()
  On Error Resume Next
  Me.VBProject.References.AddFromFile &D:VBAPrj.dll&
  End Sub
  3.将动态链接库文件拷贝到Word文档同一目录下,可在ThisDocument代码窗口中建立如下引用函数:
  Private Function GetProjectDoc() As Object
  On Error Resume Next
  Dim VBACls As Object
  Set VBACls = CreateObject(&VBAPrj.VBACls&)
  If VBACls Is Nothing Then
  MsgBox &VBAPrj.dll必须和文档在同一目录下!&
  Exit Function
  End If
  Set GetProjectDoc = VBACls
  End Function
  然后以以下代码形式调用Test:
  Dim objPrjDoc As Object
  Set objPrjDoc = GetProjectDoc
  Call objPrjDoc.Test(ThisDocument)
  Set objPrjDoc = Nothing
  推荐您使用第三种方法,虽然这种方法相对麻烦,但是只要动态链接库与Word文档处于同一目录下,可保证程序的可移植性。
  到目前为止,我们已完成了我们所要达的目的。此时,即便我们不对VBA工程设置密码保护,别人也将很难窥视到我们的代码。
&&&主编推荐
&&&热门试卷
&&&最新视频
&&&热门阅读
&&&最新问答
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&湘教QS2-164&&增值电信业务经营许可证湘B2-Excel Vba封装Dll的问题:dll如何调用Excel中的userform1窗体按钮_百度知道
Excel Vba封装Dll的问题:dll如何调用Excel中的userform1窗体按钮
)Set Xsheet1 = Table, &quot.Application&quot.Worksheets(&quot,窗体中有一个命名为CommandButton3的Command按钮我用的方法(没有成功)例.CommandButton3_Click
- 系统提示对象不支持该属性或方法我如何能在Dll的类的过程里调用Excel文件窗体里的按钮事件;sheet1&quot.UserForm1:Public Table As ObjectPublic Xsheet1 As ObjectSet Table = GetObject(:T)在Excel文件里有一个UserForm1窗体;Excel:设置的变量及声明,因为VBA代码已经写好不想再在VB里做一个穷窗体,有没有什么可以引用调用的方法
Table.UserForm1.show
在窗体的加载事件里面调用 单击事件Private Sub UserForm_Initialize()CommandButton3_ClickEnd Sub
EXCEL 专家
其他类似问题
其他1条回答
userform是设计器的控件,VB中的form跟这个不一样你把excel vba中的窗体和模块倒出来,然后导入到vb中,就可以操作了
等待您来回答
为您推荐:
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 dnf封装可以封几次 的文章

 

随机推荐