首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

VB程序运行时,怎么在程序界面上操作其它按钮

2013-07-01 
VB程序运行时,怎样在程序界面上操作其它按钮?各位大侠,小弟用VB编了一个程序用来统计EXCEL上的数据,由于EX

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楼,用宏来做。

热点排行