我正在尝试编写程序的最后一部分,我需要从Access文档中提取数据并将其打印到新的工作簿中。
首先,我将获取产品供应商的名称并使用每个供应商名称创建工作表,然后我想循环遍历每个工作表并打印订购的每个供应商的产品。
我真的很想解决如何打开新工作簿并打印我的信息。
答案 0 :(得分:6)
由于我之前的答案被删除(被认为是“不足”),我必须提供更好的答案。
如果要从Access输出数据,则必须执行以下步骤:
我将专注于数据输出,并保留格式化(数据部分是复杂的...格式化很容易)
首先,您需要在Access文件中启用Excel对象:工具菜单>引用。找到 Microsoft Excel 12.0对象库并激活该复选框。现在,您可以在服务中获得完整的Excel库: - )
现在是数据处理的时候了。我将假设你需要创建一个新的工作簿:
public sub createExcelFile()
dim XL as Excel.Application, WB as Excel.Workbook, WKS as Excel.Worksheet
dim db as DAO.database, rec as DAO.recordset, f as DAO.field
dim i as integer, j as integer
' Prepare your Excel stuff
Set XL = new Excel.Application
XL.Visible = True
Set WB = XL.Workbooks.Add
WB.Activate
Set WKS = WB.ActiveSheet ' Default: The first sheet in the newly created book
' Read your data here
set db = currentdb()
set rec = db.openrecordset("tblSampleData")
' A simple table that will show the data from rec
' i and j will be the coordiantes of the active cell in your worksheet
with rec
.movefirst
' The table headers
i = 1
j = 1
for each f in .fields
WKS.cells(i,j).value = f.name
j = j + 1
next f
' The table data
do
i = i+1
j = 1
for each f in .Fields
WKS.cells(i,j).value = f.value
j = j+1
next f
.moveNext
loop until .EOF
end with
end sub
如果要格式化单元格,可以使用WKS.cells(i,j)
(或WKS.range(...)
)属性。
看看我之前留下的链接(Siddarth Rout很乐意转到评论)。
我希望这有助于你
答案 1 :(得分:1)
Option Compare Database
Public Function format(filepath, sheetname)
Set xls = CreateObject("EXCEL.APPLICATION")
xls.screenupdating = False
xls.displayalerts = False
xls.Visible = True
xls.workbooks.Open filepath
Set xlsdd = xls.ActiveWorkbook
'删除标题
xls.Range("1:1").Select
xls.Selection.Delete Shift:=xlUp
'添加一列
xls.Columns("A:A").Select
xls.Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
'adding 5 rows
“ActiveWorkbook.Sheets( ”工作表Sheet“)。选择
xls.Rows("1:5").Insert Shift:=xlDown
'从访问中获取行并将它们放入excel
strsql = "select top 5 " & sheetname & ".* into top5_records from " & sheetname
DoCmd.RunSQL strsql
outputFileName = "C:\Users\hp\Desktop\top5_records.xls"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "top5_records", outputFileName, True
'然后打开excel并复制行
Set xls2 = CreateObject("EXCEL.APPLICATION")
xls2.screenupdating = False
xls2.displayalerts = False
xls2.Visible = True
xls2.workbooks.Open outputFileName
Set xlsdd2 = xls.ActiveWorkbook
xls2.Rows("1:5").Select
xls2.Selection.Copy
xls.Cells(1, 1).Select
xls.activesheet.Paste
' Dim currdb As DAO.Database
' Dim rst As DAO.Recordset
'
' Set currdb = CurrentDb
' Set rst = currdb.OpenRecordset(strsql) '<<<Opens query recordset via DAO
' rst.MoveLast
' rowsToReturn = rst.RecordCount
' Set rng = xls.Cells(1, 1)
' 'copy specified number of records to worksheet
'
'rng.CopyFromRecordset rst, rowsToReturn '<<<Gets all records in recordset
'将第6行设为粗体
xls.Rows("6:6").Select
With xls.Selection.Font
.Bold = True
.Name = "Arial"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
End With
'自动调整数据
xls.Sheets(sheetname).Cells.Columns.autofit
xls.CutCopyMode = False
With xlsdd
.Save
.Close
End With
xls.Visible = False
Set xlsdd = Nothing
Set xls = Nothing
End Function
答案 2 :(得分:0)
您可以将列/行宽度定义为静态像素数量或自动调整,粗体等内容是预定义的
示例
Selection.Font.Bold = True
您还可以制作模板电子表格,将内容复制到模板中并另存为。 你的帖子并没有说明实际需要做多少格式化。
答案 3 :(得分:0)
你没有提供很多细节,所以我不能给你很多细节作为回报。但是我会这样做:
现在VBA很简单
ThisWorkbook.RefreshAll
您可以在一张纸上更换供应商,而不是每个供应商一张纸。以下是您需要的技能
您应该能够找到所有这些的详细信息,但如果没有,请发布另一个问题。