如何将vb中MSHflexgrid表中的数据导入到excel表中
在搞清楚各窗体与各表关系之后,敲的几个窗体都是很简单的,没有遇到什么大问题,自己通过调试代码就可以解决。但是到了学生充值记录查看和学生上机记录查询者两个窗体时就遇到了问题,首先是查询按钮,没有预先将MSFlexGrid表清空,导致查询数据时会出现重复的现象。然后是导出Excel表。这个是以前没有接触过的,所以在查了很多资料和看了同学的博客之后总结出三种方法: 一、是直接编写代码 首先从工程部件里引用Microsoft Excel 14.0 Object Library 导出数据到excel表中代码如下: Private Sub cmdOutdataToExcel_Click() Dim i As Integer '定义行循环变量 Dim j As Integer '定义列循环变量 Dim xlApp As Excel.Application '定义类,用来创建excel实例化对象 Dim xlBook As Excel.Workbook '定义一个工作薄 Dim xlSheet As Excel.Worksheet '定义一个工作表
'首先判断myFlexGrid表中是否有数据存在可供导出 If Trim(myFlexGrid.TextMatrix(0,0)) ="" Then MsgBox "没有数据可导出",vbOKOnly +vbExclamation,"提示" Exit Sub End If
'开始导出数据到excel表中 Set xlApp =CreateObject("Excel.Application")'实例化对象xlApp为一个excel表 xlApp.Visible = True '设置excel对象可见
Set xlBook = xlApp.Workbooks.Add '添加一个工作薄 Set xlSheet = xlBook.Worksheets(1) '打开工作薄中名为1的数据表
For i = 0 To myFlexGrid.Rows - 1 '循环语句显示myFlexGrid表中的数据 For j = 0 To myFlexGrid.Cols - 1 myFlexGrid.Row = i myFlexGrid.Col = j xlSheet.Cells(i + 1,j + 1) =Trim(myFlexGrid.Text) Next Next End Sub
还有一种方法是不用引用Microsoft Excel 14.0 Object Library,只需要在根目录下建立一个空的excel表代码如下: Private SubcmdExcel_Click() Dim i AsInteger For i = 0 To myFlexGrid.Rows - 1 '行循环 myFlexGrid.Redraw = True EndSub 上面的方法在敲一个查询窗体时可以实现功能,但是后面发现还有几个窗体需要导出数据excel表中,如果每次都要写这么长的代码就显得有点麻烦,所以有一个简单的方法就是在模块里面定义一个子过程,然后用到导出excel表时调用这个过程可。这样解决了代码的重复利用。节省了存储空间。 定义模块子过程代码如下:
'创建一个模块,用来导出FlexGrid表中数据到excel表中 Public Sub OutDataToexcel(formname As Form,flexgridname As MSFlexGrid) Dim TempExcel As Excel.Application '用来创建一个工作薄 Dim TempSheet As Excel.Worksheet '用来创建一个工作表 Dim intI As Integer '设置循环变量 Dim intJ As Integer OnError GoTo Err_Proc Set TempExcel = New Excel.Application '实例化为一个对象 TempExcel.Application.Visible = True TempExcel.Workbooks.Add (1)
Set TempSheet =TempExcel.ActiveWorkbook.ActiveSheet
'对行和列进行循环,将数据填入到表中 For intI = 0 To flexgridname.Rows - 1 For intJ = 0 To flexgridname.Cols -1 TempSheet.Cells(intI + 1,intJ+ 1) = flexgridname.TextMatrix(intI,intJ) Next intJ Next intI
Err_Proc: MsgBox "导出数据失败!",vbExclamation,"提示" End Sub
当调用这个过程时,只需要简单的一句代码就可以实现 Private Sub cmdOutdataToExcel_Click() Call OutDataToexcel(frmCheckSJrecord,myFlexGrid) End Sub (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |