【问题标题】:Transfer Multiple Tables from Microsoft Access onto a single Worksheet on an Excel Workbook将多个表从 Microsoft Access 转移到 Excel 工作簿上的单个工作表上
【发布时间】:2014-10-06 07:51:23
【问题描述】:

在过去的几个小时里,我一直在网上搜寻一种方法来做到这一点,但没有找到方法。

基本上,我有 3 个相当小的表格可供访问,我希望将它们转移到单个工作表上的 Excel 工作簿。

我目前只能使用以下编码将这些表格插入到单独的工作表中:

DoCmd.TransferSpreadsheet transfertype:=acExport, _
spreadsheettype:=acSpreadsheetTypeExcel12, _
TableName:=DTable, FileName:=strWorksheetPathTable, _
hasfieldnames:=True, _
Range:="Data"

我希望将另外 2 个表转移到“数据”工作表中,1 个从 D1 开始(表是单列),另一个从 G1 开始。

如果有人能帮我推一下,那就太好了。

干杯,戴恩我

【问题讨论】:

  • 我不确定是否有办法做到这一点,但你总是可以采取一种返回路线并进行查询以选择你想要的数据,填写你想要空白的列一些任意文本和其他带有表格数据的文本。
  • 你能展示三个表的结构吗?也许可以通过单个查询来完成
  • 3 个表中的数据通过单个查询不相关。前2个表是单列,最后一个表是3列。可能会尝试加入它们,然后通过格式化将它们分开,类似于 overmind 的建议,只是希望有一种更简单的方法

标签: excel ms-access vba transfer


【解决方案1】:
  1. 将 microsoft.activex 数据对象 2.8 添加到您的引用中
  2. 将 microsoft office 对象库添加到您的参考文献中

然后像这样创建您的电子表格:

dim xl as object: set xl = createobject("Excel.Application")
XL.Visible = False
XL.DisplayAlerts = False
dim wb as object: set wb = xl.Workbooks.Add
dim ws as object: set ws = wb.Worksheets(1)

dim rst as new adodb.recordset
dim r as long, c as long 'row and column
r = 1
c = 1

rst.open "SELECT * FROM Table1", currentproject.connection, adOpenKeyset, adLockReadOnly

if not rst.eof then
    ws.range(WS.Cells(r, c).Address).CopyFromRecordSet rst
end if

rst.close
rst.open "SELECT Count(*) FROM Table1", currentproject.connection etc

r = r + rst.fields(1) + 2

rst.Close

rst.open "SELECT * FROM Table2", etc

and so on.

wb.SaveAs FileName:=xlname
xl.Quit

set ws = nothing
set wb = nothing
set xl = nothing

这给了你想要的东西,每张桌子之间有一两行。如果您愿意,您现在还可以将代码添加到流程中,以按照您的意愿设置电子表格的格式。

如果表格需要列标题,请按如下方式获取:

rst.open "SELECT * FROM Table1", currentproject.connection, adOpenKeyset, adLockReadOnly
dim ii as long
for ii = 0 to rst.fields.count - 1
    ws.cells(r, ii + 1) = rst.fields(ii)    'you can offset using c if you want
next
if not rst.eof then
    ws.range(WS.Cells(r, c).Address).CopyFromRecordSet rst
end if

【讨论】:

    猜你喜欢
    • 2021-06-16
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    相关资源
    最近更新 更多