注册 登录
Office中国论坛/Access中国论坛 返回首页

todaynew的个人空间 http://www.office-cn.net/?144436 [收藏] [复制] [分享] [RSS]

日志

导出Excel主从表示例

热度 1已有 1279 次阅读2009-3-22 14:22 |个人分类:习作|

公共模块
Public Function GetFolder() As String
'文件及文件夹路径函数
    Dim dlgOpen As FileDialog
    Dim i As Long, j As Long
    Set dlgOpen = Application.FileDialog(msoFileDialogOpen)
    With dlgOpen
        .AllowMultiSelect = True
        .Show
    End With
    i = dlgOpen.SelectedItems.Count
    If i > 0 Then
        GetFolder = ""
        For j = 2 To i
            GetFolder = GetFolder & dlgOpen.SelectedItems(j) & ";"
        Next
        j = 1
        GetFolder = GetFolder & dlgOpen.SelectedItems(j)
    Else
        GetFolder = CurDir() & "\"
    End If
    Set dlgOpen = Nothing
End Function
主窗体

Private Sub Form_Load()
Me.子窗体.Form.RecordSource = "联合查询"
End Sub
Private Sub 单据名称_DblClick(Cancel As Integer)
Me.单据名称.Locked = False
Me.单据类型.Locked = False
Me.日期.Locked = False
End Sub
Private Sub 日期_Exit(Cancel As Integer)
Me.单据名称.Locked = True
Me.单据类型.Locked = True
Me.日期.Locked = True
End Sub
Private Sub 导出_Click()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim rs As New ADODB.Recordset
Dim sql As String
Dim i As Long
Dim fname As String
Dim shtname As String
On Error GoTo 导出_Err
fname = GetFolder                                                       '打开文件夹并选取文件
shtname = InputBox("请选择表:", "表选择窗体", "Sheet1")                 '指定导出到的工作表(Sheet)名称
sql = "select * from 联合查询 where 单据ID=" & Me.单据ID
rs.Open sql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic  '打开记录集
Set xlApp = CreateObject("Excel.Application")                           '创建一个Excel实例
xlApp.Application.Visible = True                                        '使Excel可见
Set xlBook = xlApp.Workbooks.Open(fname)                                '打开Excel工作簿
'导出主表
xlBook.Application.Sheets(shtname).Select                               '按指定名称选择工作表
xlBook.Application.Range("A1").Value = "单 据 ID"
xlBook.Application.Range("A2").Value = "单据类型"
xlBook.Application.Range("C1").Value = "单据名称"
xlBook.Application.Range("C2").Value = "日    期"
xlBook.Application.Range("B1").Value = Me.单据ID
xlBook.Application.Range("B2").Value = Me.单据类型
xlBook.Application.Range("D1").Value = Me.单据名称
xlBook.Application.Range("D2").Value = Me.日期
'导出子表
xlBook.Application.Cells(3, 1).Value = "记录ID"
xlBook.Application.Cells(3, 2).Value = "单据ID"
xlBook.Application.Cells(3, 3).Value = "物资ID"
xlBook.Application.Cells(3, 4).Value = "物资名称"
xlBook.Application.Cells(3, 5).Value = "规格型号"
xlBook.Application.Cells(3, 6).Value = "计量单位"
xlBook.Application.Cells(3, 7).Value = "数量"
xlBook.Application.Cells(3, 8).Value = "单价"
xlBook.Application.Cells(3, 9).Value = "金额"
For i = 1 To rs.RecordCount
    xlBook.Application.Cells(i + 3, 1).Value = rs("记录ID")
    xlBook.Application.Cells(i + 3, 2).Value = rs("单据ID")
    xlBook.Application.Cells(i + 3, 3).Value = rs("物资ID")
    xlBook.Application.Cells(i + 3, 4).Value = rs("物资名称")
    xlBook.Application.Cells(i + 3, 5).Value = rs("规格型号")
    xlBook.Application.Cells(i + 3, 6).Value = rs("计量单位")
    xlBook.Application.Cells(i + 3, 7).Value = rs("数量")
    xlBook.Application.Cells(i + 3, 8).Value = rs("单价")
    xlBook.Application.Cells(i + 3, 9).Value = rs("金额")
    rs.MoveNext
Next
xlApp.Quit
rs.Close
Set xlApp = Nothing
Set xlBook = Nothing
导出_Exit:
    Exit Sub
导出_Err:
    MsgBox "数据错误,请检查!"
    Resume 导出_Exit
End Sub
子窗体

Private Sub 单价_Exit(Cancel As Integer)
Me.Form.RecordSource = "联合查询"
End Sub
Private Sub 物资ID_DblClick(Cancel As Integer)
Me.Form.RecordSource = "收发查询"
End Sub

刚表态过的朋友 (0 人)

发表评论 评论 (1 个评论)

回复 asklove 2009-4-17 08:04
老大,如果数据很多的情况下,这样循环导出和DoCmd.OutputTo比哪个更快?

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-12 22:10 , Processed in 0.048018 second(s), 18 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部