机房系统——导出excel表

查询窗体弄出来了,看了网上的一些代码,也写完代码了,可就是不能运行,问题请看下图:

这里写图片描述

然后我再看看明明定义了啊,为什么还是不行,后来想起来了,可能是没有引用某些东西,然后我就上网查,结果还是不错的,查到了,说是让我引用Microsoft Excel 11.0 Object Library这玩意,当然11.0是版本号,这个我还是清楚的,我安装的office是2016的(也就是我得引用Microsoft Excel 16.0 Object Library),所以我就去找,可是心凉了,竟然没有这一条,我好歹也是安装office了的,怎么这么不给面子。

这里写图片描述

然后继续搜吧,最后总算是解决了,下面来看看步骤吧:

在引用的界面点击浏览,找到Windows office的安装路径(主要是Excel应用程序的安装路径,请参考我的路径:C:\Program Files\Microsoft Office\root\Office16),文件类型选择可执行文件”.exe;.dll”(一定要选这个,因为后边我们需要找”excel.exe”,它属于执行文件,不选指定没有),然后再找到”excel.exe”,打开就可以了。

这里写图片描述

最后你就会发现引用窗体中出现了Microsoft Excel 16.0 Object Library这玩意,神奇不。(总算解决了哈哈,开心)

这里写图片描述

下面是查询和导出excel的代码:

Private Sub cmdExportExcel_Click()

    Dim xlsapp As Excel.Application                 '声明excel对象
    Dim xlsbook As Excel.Workbook                   '声明工作簿对象
    Dim xlssheet As Excel.Worksheet                 '声明工作表
    Dim j As Long
    Dim i As Long

    Set xlsapp = CreateObject("excel.application")  '创建应用程序
    Set xlsbook = xlsapp.Workbooks.Add              '创建新的空白工作簿
    Set xlssheet = xlsbook.Worksheets(1)            '设置应用表

    With xlsapp
         .Rows(1).Font.Bold = True                  '设置字体格式
    End With
    '将MSFlexGrid1的内容导入到电子表格中
    For i = 0 To MSFlexGrid1.Rows - 1               '通过循环来添加控件中的数据到Excel表中
        For j = 0 To MSFlexGrid1.Cols - 1           '由于第一行是表头,所以添加数据从第二行开始。
            xlssheet.Cells(i + 1, j + 1) = "'" & MSFlexGrid1.TextMatrix(i, j)   '因为Excel表从第一行第一列开始,而MSFlexGrid1从第0行第0列开始,所以需要加1
        Next j
    Next i
    xlsapp.Visible = True                           '显示excel表格

End Sub

Private Sub cmdInquiry_Click()
    Dim txtSQL As String
    Dim MsgText As String
    Dim mrc As ADODB.Recordset

    '判断卡号是否为空
    If Trim(txtCardNo.Text) = "" Then
        MsgBox "卡号不能为空", vbOKOnly + vbExclamation, "提示"
        txtCardNo.SetFocus
        Exit Sub
    End If
    '判断卡号是否为数字
    If Not IsNumeric(Trim(txtCardNo.Text)) Then
        MsgBox "卡号请输入数字!", vbOKOnly + vbExclamation, "提示"
        txtCardNo.Text = ""
        txtCardNo.SetFocus
        Exit Sub
    End If

    txtSQL = "select * from line_info where cardno='" & txtCardNo.Text & "'"
    Set mrc = ExecuteSQL(txtSQL, MsgText)

    If mrc.EOF = True Then
        MsgBox "没有此卡号,请重新输入!", vbOKOnly + vbExclamation, "提示"
        mrc.Close
        Exit Sub
    End If

    Do While Not mrc.EOF
        If IsNull(mrc!offdate) = False Then
            mrc!offdate = ""
        End If
    With MSFlexGrid1
        .Rows = .Rows + 1
        .CellAlignment = 8
        .TextMatrix(1, 0) = mrc!cardNo
        .TextMatrix(1, 1) = mrc!studentNo
        .TextMatrix(1, 2) = mrc!ondate
        .TextMatrix(1, 3) = mrc!OnTime

        .TextMatrix(1, 4) = mrc!offdate
        .TextMatrix(1, 5) = mrc!offtime
        .TextMatrix(1, 6) = mrc!Cash
        .TextMatrix(1, 7) = mrc!Status
        End With
        mrc.MoveNext
    Loop
        cmdExportExcel.Enabled = True
End Sub



Private Sub Form_Load()

    cmdExportExcel.Enabled = False

    With MSFlexGrid1

        .CellAlignment = 8
        .TextMatrix(0, 0) = "卡号"
        .TextMatrix(0, 1) = "姓名"
        .TextMatrix(0, 2) = "上机日期"
        .TextMatrix(0, 3) = "上机时间"
        .TextMatrix(0, 4) = "下机日期"
        .TextMatrix(0, 5) = "下机时间"
        .TextMatrix(0, 6) = "消费金额"
        .TextMatrix(0, 6) = "余额"
        .TextMatrix(0, 7) = "备注"

    End With

End Sub
Private Sub cmdExit_Click()
    Unload Me
End Sub

温馨提示:由于我们很多窗体都需要导出Excel表,所以我没有必要每个窗体都敲一遍这个代码,我们应该在模块中写一个导出Excel表的公共函数,然后需要的只需调用一下就好了,是不是省事多了。这个时候可能会有人说不用每个都敲,我们只要敲一个,剩下的只需复制就好了,如果这么想的可真就有点“傻”了,因为我们编写程序的时候,遇到能够复制粘贴的代码,就代表代码冗余了,所以任何事情任何东西都不能想的太简单,肯定会有简单的方法等着我们去发现!我在模块中弄得时候出现Bug了,如果哪位大佬会的话,记得指点我一下,留言或者通过“联系我”的栏目中的联系方式告诉我,万分感谢!

猜你喜欢

转载自blog.csdn.net/hit_the_lights/article/details/78777065