高手帮看下 使用excel 数据慢的问题在哪?
我编了一个学习用的程序,资料来自一个excel文件,内容大致为:序号,问题题目,回答选项,答案共四个类型,有近3000题。在打开程序后,要分别调用excel中的数据来显示在多个label中。但我发现EXCEL如果在FromLoad中打开后,好像只能调用一次数组,我想换题时要使用command1的Click过程,需要重新打开EXCEL才能读入下一组数据,然后还要关闭EXCEL。否则内存会有很多EXCEL在运行。这样,每次读入题目要打开,关闭一次,再读入题目,又要再打开,关闭一次。程序的运行变慢,响应慢。毕竟打开和关闭都要时间的。有什么办法可以改进这个问题呢,我是新手,边查资料边编写的。各位最好能给出方法和注释。这是我的换题主程序 ,有些语句是抄来的,没用上,所以加引号了
Private Sub Command1_Click()
Command1.Caption = "下一页"
Beep
'Dim S() As String, FileName As String, i As Integer, j As Integer
'Dim xlApp
'Dim xlBook
'Dim xlSheet
FileName = App.Path & "\book1.xlsx" '程序所在目录下的文件,请修改
Set xlApp = CreateObject("Excel.Application") '创建EXCEL对象
xlApp.DisplayAlerts = False '不显示对话框
Set xlBook = xlApp.Workbooks.Open(FileName) '打开已经存在的EXCEL工件簿文件
xlApp.Visible = False '设置EXCEL对象不可见
'Set xlSheet = xlBook.Worksheets("Sheet1") '设置活动工作表
'xlSheet.Cells(1, 1) = "" '清除单元格内容
'xlSheet.Cells(1, 1) = 1 '修改单元格内容
Set xlSheet = xlBook.Worksheets("sheet1") '打开表sheet1
Label1.Caption = xlSheet.Cells(Label1.Caption + 5, 2) 'label1读入EXCEL中的某个单元格
'Label2.Caption = xlSheet.Cells(Label1.Caption, 4) ''label2读入EXCEL中的某个单元格
If Label1.Caption <= 850 Then Label2.Caption = "单选" & Label1.Caption & ". " & xlSheet.Cells(Label1.Caption, 4) '单选 单选题号 + .+ 序号 + 文字所在地址
If Label1.Caption > 850 And Label1.Caption <= 1700 Then Label2.Caption = "多选" & Label1.Caption - 850 & ". " & xlSheet.Cells(Label1.Caption, 4) '多选 多选题号 +. + 序号 + 文字所在地址
If Label1.Caption > 1700 Then Label2.Caption = "判断" & Label1.Caption - 1700 & ". " & xlSheet.Cells(Label1.Caption, 4) '判断 判断题号 +. + 序号 + 文字所在地址
Label3.Caption = xlSheet.Cells(Label1.Caption, 5)
Label4.Caption = xlSheet.Cells(Label1.Caption, 6)
'----------------------------------
Label5.Caption = xlSheet.Cells(Label1.Caption + 1, 2)
'Label6.Caption = xlSheet.Cells(Label1.Caption + 1, 4)
If Label5.Caption <= 850 Then Label6.Caption = "单选" & Label5.Caption & ". " & xlSheet.Cells(Label1.Caption + 1, 4) '单选 单选题号 + .+ 序号 + 文字所在地址
If Label5.Caption > 850 And Label5.Caption <= 1700 Then Label6.Caption = "多选" & Label5.Caption - 850 & ". " & xlSheet.Cells(Label1.Caption + 1, 4) '多选 多选题号 +. + 序号 + 文字所在地址
If Label5.Caption > 1700 Then Label6.Caption = "判断" & Label5.Caption - 1700 & ". " & xlSheet.Cells(Label1.Caption + 1, 4) '判断 判断题号 +. + 序号 + 文字所在地址
Label7.Caption = xlSheet.Cells(Label1.Caption + 1, 5)
Label8.Caption = xlSheet.Cells(Label1.Caption + 1, 6)
'----------------------------------
Label9.Caption = xlSheet.Cells(Label1.Caption + 2, 2)
'Label10.Caption = xlSheet.Cells(Label1.Caption + 2, 4)
If Label9.Caption <= 850 Then Label10.Caption = "单选" & Label9.Caption & ". " & xlSheet.Cells(Label1.Caption + 2, 4) '单选 单选题号 + .+ 序号 + 文字所在地址
If Label9.Caption > 850 And Label9.Caption <= 1700 Then Label10.Caption = "多选" & Label9.Caption - 850 & ". " & xlSheet.Cells(Label1.Caption + 2, 4) '多选 多选题号 +. + 序号 + 文字所在地址
If Label9.Caption > 1700 Then Label10.Caption = "判断" & Label9.Caption - 1700 & ". " & xlSheet.Cells(Label1.Caption + 2, 4) '判断 判断题号 +. + 序号 + 文字所在地址
Label11.Caption = xlSheet.Cells(Label1.Caption + 2, 5)
Label12.Caption = xlSheet.Cells(Label1.Caption + 2, 6)
'----------------------------------
Label13.Caption = xlSheet.Cells(Label1.Caption + 3, 2)
'Label14.Caption = xlSheet.Cells(Label1.Caption + 3, 4)
If Label13.Caption <= 850 Then Label14.Caption = "单选" & Label13.Caption & ". " & xlSheet.Cells(Label1.Caption + 3, 4) '单选 单选题号 + .+ 序号 + 文字所在地址
If Label13.Caption > 850 And Label13.Caption <= 1700 Then Label14.Caption = "多选" & Label13.Caption - 850 & ". " & xlSheet.Cells(Label1.Caption + 3, 4) '多选 多选题号 +. + 序号 + 文字所在地址
If Label13.Caption > 1700 Then Label14.Caption = "判断" & Label13.Caption - 1700 & ". " & xlSheet.Cells(Label1.Caption + 3, 4) '判断 判断题号 +. + 序号 + 文字所在地址
Label15.Caption = xlSheet.Cells(Label1.Caption + 3, 5)
Label16.Caption = xlSheet.Cells(Label1.Caption + 3, 6)
'----------------------------------
Label17.Caption = xlSheet.Cells(Label1.Caption + 4, 2)
'Label18.Caption = xlSheet.Cells(Label1.Caption + 4, 4)
If Label17.Caption <= 850 Then Label18.Caption = "单选" & Label17.Caption & ". " & xlSheet.Cells(Label1.Caption + 4, 4) '单选 单选题号 + .+ 序号 + 文字所在地址
If Label17.Caption > 850 And Label17.Caption <= 1700 Then Label18.Caption = "多选" & Label17.Caption - 850 & ". " & xlSheet.Cells(Label1.Caption + 4, 4) '多选 多选题号 +. + 序号 + 文字所在地址
If Label17.Caption > 1700 Then Label18.Caption = "判断" & Label17.Caption - 1700 & ". " & xlSheet.Cells(Label1.Caption + 4, 4) '判断 判断题号 +. + 序号 + 文字所在地址
Label19.Caption = xlSheet.Cells(Label1.Caption + 4, 5)
Label20.Caption = xlSheet.Cells(Label1.Caption + 4, 6)
If Label1.Caption >= 6 Then
Command5.Enabled = True '当序号为6时,起用“上一页”
Else
Command5.Enabled = False
End If
If Label1.Caption >= 2695 Then Command1.Enabled = False '当最后一题出现时,关掉 下一页 键
'xlBook.SaveAs FileName:=FileName '保存工作表,结束时一定别忘了保存
xlBook.Close (False) '关闭工作簿 这里的false表示退出时不保存修改
xlApp.quit '结束EXCEL对象
Set xlApp = Nothing '释放xlApp对象
Command6.Enabled = True '打开 确定键
Command9.Enabled = True
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
Text1.Visible = True
Text2.Visible = True
Text3.Visible = True
Text4.Visible = True
Text5.Visible = True
Text1.SetFocus
End Sub
再加问一个问题,有没有办法能改写EXCEl 中,一个单元格内的一串字符串中的“|”,并按它在字符串中显示的次序,改成A,B,C,E五个字母。或者直接在VB中改好后显示在label中?
例如:|退回请求|查询|查复|止付申请 改为: A退回请求 B查询 C查复 D止付申请
例如:|法律|赔偿|刑事|民事 改为: A法律 B赔偿 C刑事 D民事
[此贴子已经被作者于2016-11-14 13:14编辑过]