各位大侠,小弟用VB编了一个程序用来统计EXCEL上的数据,由于EXCEL数据量大,所以得运行一段时间。我把文件都放在LISTBOX里面,有时候等待时间长了想停止运行,于是做了一个command按钮想删除listobx里其余的文件,但是程序运行时,该按钮不能操作(VB编的程序运行时界面上的所有按钮都不能操作,要等运行结束才能操作,包括关闭、最小化等)。请问如何解决这个问题,能够在程序运行时在界面上操作,改变listbox里的内容,谢谢!VB运行时不能操作界面按钮
解决方案 »
- [求助]如何用VB获得电脑中excel的版本号
- 请大家提供一个打开文件对话框,并把文件内容读取到TextBox中的例子
- 请教一个VC调用API的问题
- Excel的保存问题
- DLL 函数调用问题:未知声明,如何调用?各位高手研究讨论!
- 请教一个vb6当中的引用问题
- VB 里有像资源管理器里那样按列表头排序时有上下箭头的 ListView 控件吗?
- ql = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=http://127.0.0.1/register.mdb;Persist Security Info=False" 这样写中不?
- 用VB如何实现图形编辑功能?谢谢!
- 如何在VB中使用类?
- ToolTipText如何才能实现换行?
- 在vb中如何判断某一个sheet是否为空
Private Sub Command1_Click()
Do While flag = False
DoEventsIf List1.List(0) <> "" Then
Set ExcelAPP = GetObject("", "Excel.Application")
Set wbk = ExcelAPP.Workbooks.Open(List1.List(0))
For i = 6 To 100000
If wbk.Application.Cells(i, 1) = "" Then
MaxLine = i - 1
Exit For
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 i = 0 To 300
If a(i) = wbk.Application.Cells(6, 1).Text Then
c = i
Exit For
End If
Next i
XP_ProgressBar1.Value = XP_ProgressBar1.Value + 2
b=2
For n = 0 To 300
Count = 0
For i = B To MaxLine
If wbk.Application.Cells(i, 1).Text = a(n) Then
Count = Count + 1
B = B + 1
If wbk.Application.Cells(i + 1, 1).Text <> a(n) Then
wbk.Application.Cells(n + 6, 9) = wbk.Application.Cells(i, 2)
wbk.Application.Cells(n + 6, 14) = wbk.Application.Cells(i, 13)
Exit For
End If
End If
Next i
If Count = 0 Then
wbk.Application.Cells(n + 6, 9) = wbk.Application.Cells(n + 5, 9)
wbk.Application.Cells(n + 6, 14) = wbk.Application.Cells(n + 5, 14)
End If
Next nIf List1.List(0) = "" Then
Exit Do
End If
Loop
MsgBox "处理完毕!", vbExclamation, "提示"
End Sub
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
http://www.google.com.hk/search?q=vb%E8%B0%83%E7%94%A8excel%E5%AE%8F&client=aff-cs-360chromium&ie=UTF-8