【学生查看上机记录问题篇】
学生查看上机记录窗体首先不一样的就是需要插入一个MSFlexGrid控件:
步骤:菜单:工程-部件 里面找 Microsoft FlexGrid Control 6.0 控件
【问题一】没有实现即使数据库中无数据也应该显示出表头
[解决方案] 断点调试:一步一步的走,看看如何每一步怎么运行的:
因为没有数据,所以这段代码没有走,那么怎么显示这一段代码所涉及到的表头信息呢?
对比学生系统,找到了代码问题:因为这段代码走了,所以显示,那么两个代码有什么不同呢?
问题找到了:原因是我的代码多写了 If mrc.EOF = False Then '数据库中有数据 这一句代码,造成了无数据就不走这段代码,那怎么显示表头呢?去掉就OK啦。这也是我第一次自己断点调试发现的问题,也慢慢的尝试断点调试找运行过程,慢慢学习断点调试!
【问题二】下标越界——我的MSFlexGrid控件中只有2个表头,所以从第三个开始都是下标越界
[解决方案] 这个问题要设置控件的属性:行和列。控件右键——属性页——设置列和行数。行默认为1,因为行在代码里写了.rows=.rows+1,会自动增加,但是列也就是字段应该设置需要的几个!
【问题三】此窗体需要导出Excel表,则需要引用“Microsoft Excel 16.0 Object Library”,引用时找不到此程序。
【解决方案】一.菜单——工程——引用——浏览
二.找到Office安装文件夹,打开——可以先用搜索工具搜一下安装文件夹在哪里(不是安装包哦)
三.改变文件类型为exe格式:找出Excel.EXE文件选中打开,可搜索找出
四.即可看到该引用,选中添加即可
【问题四】 导出excel表报错:实时错误“1004”,应用程序定义或对象定义错误
代码调试:代码有错误:j+1写成了j=1
【问题五】 Excel表导出后内容显示有问题:
原因:代码问题:列循环的代码应该是:For j = 0 To myflexGird.Cols-1 , Cols代表列,Rows代表行。
For i = 0 To myflexGrid.Rows - 1 '行循环
For j = 0 To myflexGrid.Rows - 1 '列循环
这个错误代码的意思是:列是按照行的行数循环的,行只有2行:表头和一行数据,所以显示时显示2行,而列也是按照行数循环,则也就显示2列,所以就会出现这样的问题啦,改正代码就OK啦。
此外,这个代码错误还有可能出现实时错误:“381”下标越界问题,所以需要我们编写代码时认真仔细,注意代码逻辑和含义,注意拼写。
还有 一些小问题,比如显示的Excel表格中日期不能正常显示为日期数据,有待优化。期待
后期优化吧!附赠流程图一张以及部分代码,请多多关注与指教哦。
Private Sub Cmdout_Click()
'导出excel表
Dim ExcelApp As New Excel.Application '声明excal对象
Dim ExcelBook As New Excel.Workbook '声明工作簿对象
Dim ExcelSheet As New Excel.Worksheet '声明工作表单
Dim i As Integer '定义横坐标(行)
Dim j As Integer '定义纵坐标(列)
If myflexGrid.Text = "" Then
MsgBox "没有记录可以导出!", 0 + 48, "警告"
Exit Sub
Else
Set ExcelApp = CreateObject("Excel.application") '调用excel程序,创建excel应用程序对象
ExcelApp.Visible = True '显示Excel表格
Set ExcelBook = ExcelApp.Workbooks.Add '创建新的空白簿
Set ExcelSheet = ExcelBook.Worksheets(1) '创建新的工作表单
'填入数据
For i = 0 To myflexGrid.Rows - 1 '行循环
For j = 0 To myflexGrid.Cols - 1 '列循环
ExcelSheet.Cells(i + 1, j + 1) = myflexGrid.TextMatrix(i, j) 'cell(a,b)表示a行,b列
Next j
Next i
Set ExcelApp = Nothing '交还控制给Excel
End If
End Sub