返回列表 上一主題 發帖

公司用門禁系統當考勤,資料需要人工比對 麻煩,需要幫助

本帖最後由 stillfish00 於 2013-5-21 20:25 編輯

還有另一種...從外部資料的Microsoft Query對工作表查詢
不過要稍微懂SQL語法,底下是錄製後修改的VBA 程式

Sub ExcelQuery()
    Dim sSQL, driverID As Long
   
    driverID = 1046 'Excel2010:1046 ; Excel2003:790
    sSQL = Array("SELECT `Sheet4$`.員工編號, `Sheet4$`.姓名, `Sheet4$`.刷卡卡號, `Sheet4$`.部門, `Sheet4$`.職稱, `Sheet4$`.刷卡日期, " _
            , "Min(`Sheet4$`.刷卡時間) AS 上班時間, Max(`Sheet4$`.刷卡時間) AS 下班時間" _
            , " FROM `" & ThisWorkbook.FullName & "`.`Sheet4$` `Sheet4$`" _
            , " GROUP BY `Sheet4$`.員工編號, `Sheet4$`.姓名, `Sheet4$`.刷卡卡號, `Sheet4$`.部門, `Sheet4$`.職稱, `Sheet4$`.刷卡日期" _
           )

    ActiveWorkbook.Worksheets.Add
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
        "ODBC;DSN=Excel Files;DBQ=" & ThisWorkbook.FullName, _
        ";DefaultDir=" & ThisWorkbook.Path, _
        ";DriverId=" & driverID, _
        ";MaxBufferSize=2048;PageTimeout=5;") _
        , Destination:=Range("$A$1")).QueryTable
        .CommandText = Array(sSQL)
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "MS_QUERY_連線"
        .Refresh BackgroundQuery:=False
        '不保持連線
        .Delete
    End With
End Sub

TOP

        靜思自在 : 【生命在呼吸間】佛陀說:「生命在呼吸間。」人無法管住自己的生命,更無法擋住死期,讓自己永住人間。既然生命去來這麼無常,我們更應該好好地愛惜它、利用它、充實它,讓這無常、寶貴的生命,散發它真善美的光輝,映照出生命真正的價值。
返回列表 上一主題