翻到一个以前回的贴子,复制一个示例: '--------------------------------- ActiveX.exe ----------------------------'新建一个ActiveX.exe工程名称: Test_ActiveX '其中类名称: cTest '添加一个窗体,名称: fTest '窗体上加一个Timer控件,名称TM 'cTest上添加如下代码:Option ExplicitPrivate frm As Form Private WithEvents oTM As Timer Public Event TestStart() '开始事件 Public Event TestEnd() '结束事件Private FG As Object '本例中用来模拟传入数据的表格控件Private Sub Class_Initialize() Set frm = New fTest Load frm Set oTM = frm.TM oTM.Enabled = False End SubPrivate Sub Class_Terminate() Set oTM = Nothing Unload frm End Sub'这个方法用来通知本程序开始执行任务 Public Function StartTest(mData As Object) As Boolean '参数mData可以是你要插入的数据对象,此例中传入一个表格控件 Set FG = mData '实例化FG '延时一下 oTM.Interval = 100 oTM.Enabled = True StartTest = True End Function'插入数据到数据库,具体代码自己写了,这里只是随手写一下,模拟一个较长时间的操作 Private Sub DataToDB() 'Dim cn As connection Dim r As Long, c As Long For r = 1 To FG.Rows - 1 For c = 1 To 300 Debug.Print FG.Text Next Next End SubPrivate Sub otm_Timer() oTM.Enabled = False RaiseEvent TestStart '触发TestStart事件 DataToDB '执行"数据插入" RaiseEvent TestEnd '触发TestEnd事件 End Sub '--------------------------------------------------------------------------'---------------------------- 测试工程 ------------------------------------ '运行上面的Test_ActiveX '新建一个测试工程 '在工程引用菜单下引用Test_ActiveX '窗体上加一个command,一个Label,一个MSHFlexGrid控件 '代码:Option ExplicitDim WithEvents Obj As cTESTPrivate Sub Form_Load() '加入测试数据 Dim i As Long With MSHFlexGrid1 .Cols = 2 For i = 0 To 100 .AddItem Chr(32) & vbTab & Format(i, "0000000000"), 1 Next End With End SubPrivate Sub Form_Unload(Cancel As Integer) Set Obj = Nothing '释放对像 End Sub'按键代码 Private Sub Command1_Click() Set Obj = New cTEST Obj.StartTest MSHFlexGrid1 '传递MSHFlexGrid1中的数据,通知执行任务 End Sub '类中的开始事件 Private Sub Obj_TestStart() Label1.Caption = "正在执行数据更新..." End Sub'类中的结束事件 Private Sub Obj_TestEnd() Label1.Caption = "数据更新完毕" Set Obj = Nothing '释放对像 End Sub
可以用 Timer 来显示一些东西。记住,Timer 需要在编译成 .exe 之后才能表现出类似“多线程”的功能,在 IDE 界面下看不出效果。
'--------------------------------- ActiveX.exe ----------------------------'新建一个ActiveX.exe工程名称: Test_ActiveX
'其中类名称: cTest
'添加一个窗体,名称: fTest
'窗体上加一个Timer控件,名称TM
'cTest上添加如下代码:Option ExplicitPrivate frm As Form
Private WithEvents oTM As Timer
Public Event TestStart() '开始事件
Public Event TestEnd() '结束事件Private FG As Object '本例中用来模拟传入数据的表格控件Private Sub Class_Initialize()
Set frm = New fTest
Load frm
Set oTM = frm.TM
oTM.Enabled = False
End SubPrivate Sub Class_Terminate()
Set oTM = Nothing
Unload frm
End Sub'这个方法用来通知本程序开始执行任务
Public Function StartTest(mData As Object) As Boolean
'参数mData可以是你要插入的数据对象,此例中传入一个表格控件
Set FG = mData '实例化FG
'延时一下
oTM.Interval = 100
oTM.Enabled = True
StartTest = True
End Function'插入数据到数据库,具体代码自己写了,这里只是随手写一下,模拟一个较长时间的操作
Private Sub DataToDB()
'Dim cn As connection
Dim r As Long, c As Long
For r = 1 To FG.Rows - 1
For c = 1 To 300
Debug.Print FG.Text
Next
Next
End SubPrivate Sub otm_Timer()
oTM.Enabled = False
RaiseEvent TestStart '触发TestStart事件
DataToDB '执行"数据插入"
RaiseEvent TestEnd '触发TestEnd事件
End Sub
'--------------------------------------------------------------------------'---------------------------- 测试工程 ------------------------------------
'运行上面的Test_ActiveX
'新建一个测试工程
'在工程引用菜单下引用Test_ActiveX
'窗体上加一个command,一个Label,一个MSHFlexGrid控件
'代码:Option ExplicitDim WithEvents Obj As cTESTPrivate Sub Form_Load()
'加入测试数据
Dim i As Long
With MSHFlexGrid1
.Cols = 2
For i = 0 To 100
.AddItem Chr(32) & vbTab & Format(i, "0000000000"), 1
Next
End With
End SubPrivate Sub Form_Unload(Cancel As Integer)
Set Obj = Nothing '释放对像
End Sub'按键代码
Private Sub Command1_Click()
Set Obj = New cTEST
Obj.StartTest MSHFlexGrid1 '传递MSHFlexGrid1中的数据,通知执行任务
End Sub
'类中的开始事件
Private Sub Obj_TestStart()
Label1.Caption = "正在执行数据更新..."
End Sub'类中的结束事件
Private Sub Obj_TestEnd()
Label1.Caption = "数据更新完毕"
Set Obj = Nothing '释放对像
End Sub
可以用 Timer 来显示一些东西。记住,Timer 需要在编译成 .exe 之后才能表现出类似“多线程”的功能,在 IDE 界面下看不出效果。