ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 540|回复: 7

[求助] VBA 把accesss数据库的工资表数据写入到excel 表里

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-5-3 12:08 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 rendiule01 于 2023-5-4 12:32 编辑

搞了好几天,都没弄出来?请各路大神指点下,解惑?
  把access 数据库工资表数据写入到excel 表里,希望在access里实现
     写入前先清空excel 文件sheet 明细表,再写入
报错调试在黄色区域
  运行错误424 要求对象   
' 将 Access 数据库表或查询的数据写入 Excel 文件中
    excelSheet.Range("A2").Resize(UBound(accessData, 2)+1, UBound(accessData, 1)+1).Value =excelApp. WorksheetFunction.Transpose(accessData)
Private Sub Aexcel()
  ' 创建对 Excel 应用程序的新引用
    Dim excelApp As Object
    Set excelApp = CreateObject("Excel.Application")
    ' 尝试获取任何现有的 Excel 应用程序引用
    On Error Resume Next
    Set excelApp = GetObject(, "Excel.Application")
    On Error GoTo 0
    ' 如果应
用程序不存在,则返回新创建的引用
    If excelApp Is Nothing Then
        Set excelApp = CreateObject("Excel.Application")
    End If
    ' 打开 Excel 文件
    Dim excelWorkbook As Object
    Set excelWorkbook = excelApp.Workbooks.Open("D:\工资单\工资单模板.xlsm")
    ' 获取 Excel 文件的工作表对象
    Dim excelSheet As Object
    Set excelSheet = excelWorkbook.WorkSheets("明细表")
    ' 清空 sheet 数据
    excelSheet.Cells.ClearContents
    ' 获取 Access 数据库表或查询的数据
    Dim accessData As Variant
   
accessData = CurrentDb.OpenRecordset("SELECT * FROM 工资明细表").GetRows() 'DAO不支持这种写法,ADO没问题
    ' 将 Access 数据库表或查询的数据写入 Excel 文件中
    excelSheet.Range("A2").Resize(UBound(accessData, 2)+1, UBound(accessData, 1)+1).Value= excelApp.WorksheetFunction.Transpose(accessData)   
    ' 保存并关闭 Excel 文件
    excelWorkbook.Save
    excelWorkbook.Close
    excelApp.Quit
    Set excelSheet = Nothing
    Set excelWorkbook = Nothing
    Set excelApp = Nothing  
End Sub


'''''下面是完整代码'''''''''''''''''''''''''''''''''''''''''

Private Sub Aexcel()
    ' 创建对 Excel 应用程序的新引用
    Dim excelApp As Object
    Set excelApp = CreateObject("Excel.Application")
    ' 尝试获取任何现有的 Excel 应用程序引用
    On Error Resume Next
    Set excelApp = GetObject(, "Excel.Application")
    On Error GoTo 0
   
    ' 如果应用程序不存在,则返回新创建的引用
    If excelApp Is Nothing Then
        Set excelApp = CreateObject("Excel.Application")
    End If
   
    ' 打开 Excel 文件
    Dim excelWorkbook As Object
    Set excelWorkbook = excelApp.Workbooks.Open("D:\工资单\工资单模板.xlsx")
   
    ' 获取 Excel 文件的工作表对象
    Dim excelSheet As Object
    Set excelSheet = excelWorkbook.WorkSheets("明细表")
   
    ' 清空 sheet 数据
    excelSheet.Cells.ClearContents
   
    ' 获取字段名
    Dim rst As DAO.Recordset
    Set rst = CurrentDb.OpenRecordset("SELECT * FROM 工资明细表")
    Dim excelHeader As Variant
    ReDim excelHeader(0 To rst.Fields.count - 1)
    For i = 0 To rst.Fields.count - 1
        excelHeader(i) = rst.Fields(i).Name
    Next i
    rst.Close
    Set rst = Nothing
   
    ' 将字段名写入 Excel Sheet 的第一行
    For i = 0 To UBound(excelHeader)
        excelSheet.Cells(1, i + 1) = excelHeader(i)
    Next i
   
    ' 将 Access 数据库表或查询的数据写入 Excel 文件中
    excelSheet.Range("A2").CopyFromRecordset CurrentDb.OpenRecordset("SELECT * FROM 工资明细表")
   
    ' 保存并关闭 Excel 文件
    excelWorkbook.Save
    excelWorkbook.Close
    excelApp.Quit
    Set excelSheet = Nothing
    Set excelWorkbook = Nothing
    Set excelApp = Nothing
End Sub



工资单.zip

154.02 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2023-5-3 12:55 | 显示全部楼层
为什么不在excel端操作,access当作数据库不行吗

TA的精华主题

TA的得分主题

发表于 2023-5-3 14:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-3 15:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

谢谢大佬的帮助,若是在excel 操作我会,现需要在access操作,access vba代码

TA的精华主题

TA的得分主题

发表于 2023-5-3 16:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
rendiule01 发表于 2023-5-3 15:36
谢谢大佬的帮助,若是在excel 操作我会,现需要在access操作,access vba代码

那我看错了哈。其实原理一样的,只是多了调用excel

    ' 将 Access 数据库表或查询的数据写入 Excel 文件中
    excelSheet.Range("A2").Resize(UBound(accessData, 2) + 1, UBound(accessData, 1)) = excelApp.WorksheetFunction.Transpose(accessData)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-5-3 16:32 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-4 08:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
f8b1987 发表于 2023-5-3 16:31
那我看错了哈。其实原理一样的,只是多了调用excel

    ' 将 Access 数据库表或查询的数据写入 Excel  ...

谢谢大神,按照你的方法,但是出来的数据只有一行,工资明细表实际7行,怎么修改?


image.png
image.png




Private Sub Aexcel()
  ' 创建对 Excel 应用程序的新引用
    Dim excelApp As Object
    Set excelApp = CreateObject("Excel.Application")
   
    ' 尝试获取任何现有的 Excel 应用程序引用
    On Error Resume Next
    Set excelApp = GetObject(, "Excel.Application")
    On Error GoTo 0
   
    ' 如果应用程序不存在,则返回新创建的引用
    If excelApp Is Nothing Then
        Set excelApp = CreateObject("Excel.Application")
    End If
   
    ' 打开 Excel 文件
    Dim excelWorkbook As Object
    Set excelWorkbook = excelApp.Workbooks.Open("D:\工资单\工资单模板.xlsx")
   
    ' 获取 Excel 文件的工作表对象
    Dim excelSheet As Object
    Set excelSheet = excelWorkbook.WorkSheets("明细表")
   
    ' 清空 sheet 数据
    excelSheet.Cells.ClearContents
   
    ' 获取 Access 数据库表或查询的数据
    Dim accessData As Variant
    accessData = CurrentDb.OpenRecordset("SELECT * FROM 工资明细表").GetRows()
   
    ' 将 Access 数据库表或查询的数据写入 Excel 文件中
    excelSheet.Range("A2").Resize(UBound(accessData, 2) + 1, UBound(accessData, 1)) = excelApp.WorksheetFunction.Transpose(accessData)

    ' 保存并关闭 Excel 文件
    excelWorkbook.Save
    excelWorkbook.Close
    excelApp.Quit
    Set excelSheet = Nothing
    Set excelWorkbook = Nothing
    Set excelApp = Nothing
   
End Sub

TA的精华主题

TA的得分主题

发表于 2023-5-4 09:19 | 显示全部楼层
试试这样:
excelSheet.Range("A2").copyfromrecordset CurrentDb.OpenRecordset("SELECT * FROM 工资明细表")
在你报错的位置,将两句换成一句

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 05:47 , Processed in 0.038386 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表