導出excel和PDF小結 vba


最近接觸了一個關於Access工具的項目,所以整理下需要使用的方法。

功能要求簡介:

  1.將數據表中的數據導出到excel和PDF

  2.並根據某個字段名稱分sheet輸出。

  3.無模板方式

方案簡介:

  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"
    Else
        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) ’獲取存儲路徑
        Else
            '退出進程並釋放資源
            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
    Else
        '導出 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            

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM