注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

零售创新,创新那些事儿,SPSS,VBA

零售创新

 
 
 

日志

 
 
关于我

新浪微博,零售创新 研究经理,数据分析师 希望和市场研究和零售业的同事共同进步! 本博客发表的都是免费或试用的资料,如果有版权问题请发邮件wangli12a@163.com联系删除。 spss excel vba blog

网易考拉推荐
GACHA精选

VBA封装为Dll的例子、方法与总结(转载)  

2012-04-09 16:22:57|  分类: VB和VBA知识 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

VBA封装为Dll的例子、方法与总结(转载)

制作DLL时,ThisWorkBook中的代码封装方法如下:


1、打开VB6,新建ActiveX DLL。修改“工程”名称和“类模块”名称为需要的名称。本例中,工程修改为TestDLL,类模块修改为Test。


2、建立引用。一般需要引用Microsoft Office 11.0 Object Library和MicrosoftExcel11.0 Object Library。如果VBA代码中还有其他引用

,在VB中也要对他们引用。


3、这一步就是具体封装代码了。
在刚才建立好的TestDLL中,将代码放入Test类模块中。
如封装ThisWorkBook中的Open事件:
Sub wbk_open(EApp As Excel.Application, wb As Excel.Workbook, sh As Excel.Worksheet)
'--VBA中需要封装的主体代码
End Sub
其中VBA中的代码为事先做好的要封装的代码,如下面这个例子:
'打开工作薄后在当前的工作表A1中输入Test
Private Sub workbook_open()
Cells(1, 1) = "Test"
End Sub
封装为DLL的代码为:
Sub wbk_open(EApp As Excel.Application, wb As Excel.Workbook, sh As Excel.Worksheet)
Cells(1, 1) = "Test"
End sub
现在在VB6中生成Dll,到此就完成封装了。


4、在VBA中使用封装的代码
首先,在VBA中要引用刚才生成的TestDll.dll。
然后新建一个模块,在其中定义这样一个变量T:
Public T As New TestDll.Test
然后在ThisWorkBook的Open中引用TestDll中的Test,代码如下:
Private Sub workbook_open()
On Error Resume Next
T.wbk_open Application, ThisWorkbook, ActiveSheet
End Sub
这样每次打开Excel后,就在Sheet1的Cells(1,1)中输入“Test”。
当然,如果你想在第2张工作表的A1中输入Test,那么可以这样用:
Private Sub workbook_open()
On Error Resume Next
T.wbk_open Application, ThisWorkbook, Sheets(2)
End Sub

 

以上就是代码封装的全过程,需要注意的是变量的传递要互相对应。

上面示例中的封装代码是用3个变量传递的,如果只用1个变量传递,代码如下:
'封装为DLL的代码为:
Sub wbk_open(sh As Excel.Worksheet)
Cells(1, 1) = "Test"
End sub
'ThisWorkBook中使用Dll的代码为
Private Sub workbook_open()
On Error Resume Next
T.wbk_open ActiveSheet
End Sub

Dll文件和Test文件,测试时请重新引用TestDll.dll文件

 


看看下面常用的VBA界面处理代码,封装为Dll时应该如何改代码?

'需要封装的VBA代码
Sub 恢复系统界面()
On Error Resume Next
With Application
.Caption = "版权所有:GoodFortune Fromwww.ExcelHome.net"
.CommandBars("Worksheet Menu Bar").Enabled = True
.CommandBars("Toolbar List").Enabled = True
.CommandBars("Standard").Visible = True
.CommandBars("Formatting").Visible = True
.DisplayFormulaBar = True
End With
With ActiveWindow
.DisplayGridlines = True
.DisplayHeadings = True
.DisplayHorizontalScrollBar = True
.DisplayVerticalScrollBar = True
.DisplayWorkbookTabs = True
End With
End Sub
Sub 隐藏系统界面()
On Error Resume Next
With Application
.CommandBars("Worksheet Menu Bar").Enabled = False
.CommandBars("Toolbar List").Enabled = False
.CommandBars("Standard").Visible = False
.CommandBars("Formatting").Visible = False
.DisplayFormulaBar = False
End With
With ActiveWindow
.DisplayGridlines = True
.DisplayHeadings = False
.DisplayHorizontalScrollBar = False
.DisplayVerticalScrollBar = False
.DisplayWorkbookTabs = False
End With
End Sub


 

首先,分析一下,上面的VBA代码中有几个需要传递的变量(或者先分析“对象”),一个是Application,一个是ActiveWindow,其中

ActiveWindow是Application的下一级对象,因此,按第2条原则,从最上一层开始,完整形式为Application.ActiveWindow,因此上面的代码

可以改成如下的形式,用一个变量传递就可以了。

'封装为Dll的代码
Sub 恢复系统界面(oExcel as Excel.Application)
On Error Resume Next
With oExcel
.Caption = "版权所有:GoodFortune Fromwww.ExcelHome.net"
.CommandBars("Worksheet Menu Bar").Enabled = True
.CommandBars("Toolbar List").Enabled = True
.CommandBars("Standard").Visible = True
.CommandBars("Formatting").Visible = True
.DisplayFormulaBar = True
End With
With oExcel.ActiveWindow
.DisplayGridlines = True
.DisplayHeadings = True
.DisplayHorizontalScrollBar = True
.DisplayVerticalScrollBar = True
.DisplayWorkbookTabs = True
End With
End Sub
Sub 隐藏系统界面(oExcel as Excel.Application)
On Error Resume Next
With oExcel
.CommandBars("Worksheet Menu Bar").Enabled = False
.CommandBars("Toolbar List").Enabled = False
.CommandBars("Standard").Visible = False
.CommandBars("Formatting").Visible = False
.DisplayFormulaBar = False
End With
With oExcel.ActiveWindow
.DisplayGridlines = True
.DisplayHeadings = False
.DisplayHorizontalScrollBar = False
.DisplayVerticalScrollBar = False
.DisplayWorkbookTabs = False
End With
End Sub


由上可见,封装中需要修改的是将对象变量换成从根一级开始的完整形式,其他部分则不需要修改。

上面的例子是我学习中的经验总结,拿出来分享,虽然写的不好,但却是自己一步一步琢磨的,希望能抛砖引玉,请朋友们多指点。

----------------
 

  评论这张
 
阅读(2034)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017