标签:
杂谈 |
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
.DisplayHorizontalScrollB
.DisplayVerticalScrollBar
.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
.DisplayHorizontalScrollB
.DisplayVerticalScrollBar
.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
.DisplayHorizontalScrollB
.DisplayVerticalScrollBar
.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
.DisplayHorizontalScrollB
.DisplayVerticalScrollBar
.DisplayWorkbookTabs = False
End With
End Sub
由上可见,封装中需要修改的是将对象变量换成从根一级开始的完整形式,其他部分则不需要修改。
上面的例子是我学习中的经验总结,拿出来分享,虽然写的不好,但却是自己一步一步琢磨的,希望能抛砖引玉,请朋友们多指点。
----------------