在搞清楚各窗体与各表关系之后,敲的几个窗体都是很简单的,没有遇到什么大问题,自己通过调试代码就可以解决。但是到了学生充值记录查看和学生上机记录查询者两个窗体时就遇到了问题,首先是查询按钮,没有预先将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
Dim j As Integer
myFlexGrid.Redraw = False '关闭表格重画,加快运行速度
Set xlApp =CreateObject("Excel.Application")'创建EXCEL对象
'打开已经存在的EXCEL工件簿文件
Set xlBook =xlApp.Workbooks.Open(App.Path & "\学生上机记录.xls")
xlApp.Visible = True '设置EXCEL对象可见
Set xlSheet =xlBook.Worksheets("Sheet1") '设置活动工作表
For i = 0 To myFlexGrid.Rows - 1 '行循环
For j = 0 To myFlexGrid.Cols- 1 '列循环
myFlexGrid.Row =i
myFlexGrid.Col =j
'保存到EXCEL xlBook.Worksheets("Sheet1").Cells(i+ 1,j + 1) = myFlexGrid.Text Next j
Next I
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
原文链接:https://www.f2er.com/vb/258469.html