以下是引用守柔在2004-11-17 5:13:00的发言:谢谢,受益匪浅! 但我也想谈一下我多次测试过后以后就事论事的几个想法,供探讨,绝无其它意思。(李东华老师也是我的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中的标准模块(或者过程)之一吧(我只是自己判断,无理论依据). 不妥之处,请李老师海涵. 晕,LZ怎么对此帖不作反应???? 期待ing |