2014-10-06 43 views
0

我花了最近几个小时在网上搜索一个没有找到方法的方法。将Microsoft Access中的多个表格转移到Excel工作簿上的单个工作表上

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

我目前只能使用下列编码来插入这些表到单独的工作表:

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

我想2多个表转移到“数据”工作表中,1开始在D1(表是一个单列),另一个在G1。

如果任何人都可以用甜蜜的推动来帮助我。

欢呼声中,丹麦人我

+0

,我不知道是否有一种方法可以做到这一点,但你总是有种退居路线,并作出查询选择你想要的数据,用一些任意的文本填写你想要的空白列,其他的用表格数据填写。 – 2014-10-06 12:12:38

+0

你可以显示三个表的结构吗?可能是它可以通过单个查询来完成 – 2014-10-06 19:23:02

+0

3个表中的数据不能通过单个查询来关联。前两个表格是一个单列,最后一个表格是三列。 也许可以尝试加入它们,然后用格式化将它们分开,类似于主题提示,只是希望能有一种更简单的方法 – 2014-10-07 00:31:59

回答

0
  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 

这给你你想要的东西,用一两行之间的eac h表。您现在还可以将代码添加到流程中,以便设置电子表格的格式(如果您希望的话)。

如果一个表需要的列标题让他们这样的:

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 
相关问题