方案简介:
1.设置头部的标题内容和打印区域的单元格格式,标题内容的格式再单独调整(比起一个个单元格调整,可以提高效率)
2.copy设置好的单元格,一次性生成多个sheet.(开始创建sheet会有点时间开销,但后面会快一点。总体上来说效率提高了)
3.然后就是每个sheet的数据处理了
需要用到的函数:
不会写的函数,可以使用宏录制,然后查看录制的代码
1.打印设置
With objCurSheet.PageSetup 'objCurSheet 当前sheet名称
.PaperSize = xlPaperA3 '打印纸大小:A3
.Orientation = xlLandscape '打印方向:横向
.PrintTitleRows = "$1:$7" '设置第一行至第七行为标题
.PrintTitleColumns = "A:O" '设置A到O列为标题列
.PrintArea = "$A:$O" '设置打印区域A到O列
.BottomMargin = 26 '页边距
.TopMargin = 26 '页边距
End With
2.设置单元格为文本格式
objCurSheet.Range("A:O").NumberFormatLocal = "@" '设置A到O列为文本格式
3.设置单元格宽度
objCurSheet.Columns("A").ColumnWidth = 9
4.接下来就不继续列举单元格操作,大家自己录制宏看吧。我说一下宏录制的问题吧。
宏录制时,Range等属性前是不加表名的,并且会添加选中的操作,需要修改
Range("B9").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
其实上面的代码应该改为如下(1.加上表对象,跟excel进程正常退出是有关系的。2.减少对象的选择,可以提高效率):
With objCurSheet.Range("B9")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
5.链接当前数据库表,查询方式如下:
Dim ExcelAp As New Excel.Application
Dim ExcelBk As New Excel.workBook
Set ExcelBk = ExcelAp.Workbooks.Add
Dim ExcelSh As New Excel.Worksheet
Dim Obj_DataBase As DAO.Database
Dim Obj_Recordset As DAO.Recordset
Set Obj_DataBase = CurrentDb()
Application.SysCmd acSysCmdSetStatus, "Exporting" '设置Acess左下角的状态提示
Set Obj_Recordset = Obj_DataBase.OpenRecordset("tablename")
Do While Not Obj_Recordset.EOF
'数据处理
Obj_Recordset.MoveNext
Loop
6.导出excel和PDF,并打开excel
If OutType = 1 Then
extension = ".xls"
extension = ".pdf"
End If
'Open the window to select the target folder
Dim result As String
'弹出选择路径的窗口 start
With Application.FileDialog(msoFileDialogSaveAs)
.Title = "Please select the target folder"
.InitialFileName = "文件名" & extension
If .Show = -1 Then
result = .SelectedItems(1) ’获取存储路径
'退出进程并释放资源
ExcelBk.Close Savechanges:=False
ExcelAp.Quit
Set ExcelBk = Nothing
Set ExcelAp = Nothing
Set ExcelSh = Nothing
Set Obj_DataBase = Nothing
Set Obj_Recordset = Nothing
Application.SysCmd acSysCmdSetStatus, "Exporting canceled"
Exit Function
End If
End With
'弹出选择路径的窗口 end
If OutType = 1 Then
'保存文件
ExcelBk.SaveAs FileName:=result
ExcelBk.Close
If InStr(1, result, ".xls") = 0 Then
result = result & ".xls"
End If
'打开excel文件
ExcelAp.Visible = True
ExcelAp.Workbooks.Open FileName:=result
'导出 PDF
ExcelBk.ExportAsFixedFormat _
Type:=xlTypePDF, _
FileName:=result, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=True, _
OpenAfterPublish:=True
ExcelBk.Close Savechanges:=False
ExcelAp.Quit
End If
Set ExcelBk = Nothing
Set ExcelAp = Nothing
Set ExcelSh = Nothing
Set Obj_DataBase = Nothing
Set Obj_Recordset = Nothing