打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Excel [分享]DLL文件制作与在VBA调用初级进阶

谢谢,受益匪浅!

但我也想谈一下我多次测试过后以后就事论事的几个想法,供探讨,绝无其它意思。(李东华老师也是我的VBA启蒙老师之一!本文中部分可能是李老师随手笔误)

来看一下这段关键代码:

Sub test()

On Error Resume Next

Dim i, j As Integer

Dim EB

Set EB = GetObject(, "Excel Application")

With EB.ActiveSheet

i = .Cells(1, 1).Value

j = .Cells(1, 2).Value

.Cells(1, 3) = i + j

End With

Set EB = Nothing

End Sub

在这里,有几个问题,一是对于变量的声明问题,Dim i, j As Integer中只有是J 被声明成了Integer,而I 的数据类型仍然是Variant。此点在帮助中的变量声明中有详细论述,但易被网友错误理解(与中文书写思维有差异),当然最好将EB的数据类型声明为OBJECT,但在此处的确如小美菜所言,可以省去(我们的APPLICATION对象本来就是EXCEL了)

第二个问题,Set EB = GetObject(, "Excel Application"),这是一句错误句子正确的书写应该为: Set EB = GetObject(, "Excel.Application"),由于前面有了 On Error Resume Next,而且我们的Application对象又是EXCEL,所以没有发生错误。

所以正确的方法是:Sub test() On Error Resume Next Dim i As Integer, j As Integer Dim EB As Object Set EB = GetObject(, "Excel.Application") With EB.ActiveSheet i = .Cells(1, 1).Value j = .Cells(1, 2).Value .Cells(1, 3) = i + j End With Set EB = Nothing End Sub

其中更简洁的方式为:

Sub test() On Error Resume Next Dim i As Integer, j As Integer With ActiveSheet i = .Cells(1, 1).Value j = .Cells(1, 2).Value .Cells(1, 3) = i + j End With End Sub

(这里我们不去讨论两个单元格相加事宜)

另外在实践过程中,我还发现了这个问题:

Dim abc As New Mytest '此为错误为缺少用户类型不是工程.

后将其改为:

Sub Example() Dim abc As New MyTest.Class1 abc.test End Sub 则正确运行.我理解是此DLL文件应该是一个库,而其中的.calls1是库中的一个类(类模块),而test模块则是CALLS1中的标准模块(或者过程)之一吧(我只是自己判断,无理论依据).

不妥之处,请李老师海涵.

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
VB打开EXCEL的方法
VB DataGrid 的导出或打印
excel vba常见问题解答
谁知道怎么调用EXCEL做报表?
Excel VBA 快速上手之宝典
VB 调用 Excel 9.0 命令
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服