求助:VB操作Excel的一段代码
下面是自己做的一段代码,主要实现的功能是点击按钮后将MsFlexGrid控件中的数据写入到Excel中,并保存为另一文件,代码如下:主要存在的问题有:
1、保存完成后Excel进程不能自动关闭,导致无法进行第二次保存;
2、保存执行速度很慢,原因是该Grid控件的总行数设定为800,所以循环的时间较长,导致运行很慢,目前的现状是总行数已经定死,有没有办法就是判断实际数据的总行数,而非控件的总行数,比如:扫描到Grid控件的某一行第几列数据为空时跳出for循环,如何实现呢?
3、保存的时候是按照安装路径下的报表模板,另存到另外一个文件夹中,那么如何判断该文件夹是否存在呢,如果不存在如何迅速创建呢?
静候高手指教!
Private Sub cmdSav_Click(Index As Integer)
On Error GoTo kk
Dim i As Integer
Dim j As Integer
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim xlRange As Excel.Range
Dim fn As String
Set xlApp = CreateObject("excel.application")
Set xlBook = xlApp.Workbooks.Open(App.Path & "\report.xls")
xlApp.Visible = False
Set xlSheet = xlBook.Worksheets("Data")
With grdRSLT(Index)
For i = 1 To .Rows - 1
For j = 0 To .Cols - 1
xlSheet.Cells(i + 19, j + 1) = .TextMatrix(i, j) '插入数据从19行开始
Next j
Next i
End With
xlSheet.Range("A" & grdRSLT(Index).Rows + 20 & ":O" & grdRSLT(Index).Rows + 20).Select
Selection.MergeCells = True
Selection.HorizontalAlignment = xlCenter
Selection.Merge
Selection = "End of Test Data"
xlSheet.Range("A1").Select
fn = "E:\Report\" & "S" & Index & "_" & Format(txtTestDate(Index), "yymmdd") & "_" & txtMachineNo(Index) & ".xls"
xlBook.SaveAs fn
Set xlSheet = Nothing
xlBook.Close
Set xlBook = Nothing
xlApp.Quit
Set xlApp = Nothing
kk:
End Sub
[解决办法]
1、注释掉On Error GoTo kk,该行可能导致xlApp.Quit代码未执行。
2、使用数组方式导出数据,参见《用数组方式快速导出MSFlexGrid表格数据到Excel表格中》。
3、使用VB函数Dir判断文件或文件夹是否存在。
[解决办法]
2、保存执行速度很慢,原因是该Grid控件的总行数设定为800,所以循环的时间较长,导致运行很慢,目前的现状是总行数已经定死,有没有办法就是判断实际数据的总行数,而非控件的总行数,比如:扫描到Grid控件的某一行第几列数据为空时跳出for循环,如何实现呢?
加if判断吧
For i = 1 To .Rows - 1
For j = 0 To .Cols - 1
if len(.TextMatrix(i, j))>0 then
xlSheet.Cells(i + 19, j + 1) = .TextMatrix(i, j) '插入数据从19行开始
else
exit for
end if
Next j
Next i
End With
[解决办法]