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

VB操作Excel的一段代码

2012-01-30 
求助:VB操作Excel的一段代码下面是自己做的一段代码,主要实现的功能是点击按钮后将MsFlexGrid控件中的数据

求助: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

[解决办法]

探讨结果:xlSheet.Selection这个是不可行的提示无效的属性,不过仍然谢谢您!

热点排行
Bad Request.