VB程序运行时,怎样在程序界面上操作其它按钮?
各位大侠,小弟用VB编了一个程序用来统计EXCEL上的数据,由于EXCEL数据量大,所以得运行一段时间。我把文件都放在LISTBOX里面,有时候等待时间长了想停止运行,于是做了一个command按钮想删除listobx里其余的文件,但是程序运行时,该按钮不能操作(VB编的程序运行时界面上的所有按钮都不能操作,要等运行结束才能操作,包括关闭、最小化等)。请问如何解决这个问题,能够在程序运行时在界面上操作,改变listbox里的内容,谢谢! VB 运行时不能操作界面按钮
[解决办法]
不知道有没有错误,你自己参考一下吧
Private Sub Command1_Click()
Dim ExcelApp As Excel.Application
Dim wbk As Excel.Workbook
Dim sht As Excel.Worksheet
Dim MaxLine As Long
'建议不用Application对象访问cell
If List1.List(0) <> "" Then
Set ExcelApp = GetObject("", "Excel.Application") '词句不用放在循环里面,应用对象不要一直创建
Set wbk = ExcelApp.Workbooks.Open(List1.List(0))
Set sht = wbk.Worksheets("sheet1")
Do While flag = False '不明白这个循环做什么?
DoEvents
' Set ExcelAPP = GetObject("", "Excel.Application") '词句不用放在循环里面,应用对象不要一直创建
' Set wbk = ExcelAPP.Workbooks.Open(List1.List(0))
With sht
'For i = 6 To 100000'改成while会比较柔性
MaxLine = 6
While .Cells(MaxLine, 1) <> ""
MaxLine = MaxLine + 1
DoEvents
End If
'Next i
XP_ProgressBar1.Value = XP_ProgressBar1.Value + 2
For i = 6 To MaxLine
wbk.Application.Cells(i, 10) = wbk.Application.Cells(i, 2) * wbk.Application.Cells(i, 3)
Next i
'此for最好在excel里面设置公式
For i = 0 To 300
If a(i) = .Cells(6, 1) Then
c = i
Exit For
End If
DoEvents
Next i
XP_ProgressBar1.Value = XP_ProgressBar1.Value + 2
B = 2
For n = 0 To 300
Count = 0
For i = B To MaxLine
If .Cells(i, 1) = a(n) Then
Count = Count + 1
B = B + 1
If .Cells(i + 1, 1).Text <> a(n) Then
.Cells(n + 6, 9) = .Cells(i, 2)
.Cells(n + 6, 14) = .Cells(i, 13)
Exit For
End If
End If
DoEvents
Next i
If Count = 0 Then
.Cells(n + 6, 9) = .Cells(n + 5, 9)
.Cells(n + 6, 14) = .Cells(n + 5, 14)
End If
Next n
If List1.List(0) = "" Then
Exit Do
End If
Loop
End With
MsgBox "处理完毕!", vbExclamation, "提示"
End Sub
[解决办法]
数据多, 运算量大的处理还是放在里面, 直接用宏来处理比较好, 计算代码基本和VB一样, 还省却了来回倒腾数据的消耗.
至于你想用VB来做个控制界面的话, 可以在vb中调用excel中的宏来处理, 这样就是异步处理的. 效率也高
http://www.google.com.hk/search?q=vb%E8%B0%83%E7%94%A8excel%E5%AE%8F&client=aff-cs-360chromium&ie=UTF-8
[解决办法]
同意11楼,用宏来做。