机房收费系统——【学生查看上机记录】之MSFlexGrid控件 & 导出Excel表

 

【学生查看上机记录问题篇】
学生查看上机记录窗体首先不一样的就是需要插入一个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

猜你喜欢

转载自blog.csdn.net/Ginny97/article/details/85258545