初步的代码已经完成,但有个小缺陷:
Sub 分类汇总() Dim StrSql As String Set MyData = CreateObject("ADODB.Connection")
MyData.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;';Data Source=" & ThisWorkbook.FullName StrSql = StrSql & "SELECT 属地,所属油库,品名,安全容量,空容量,进货量,本月进货量,本年进货量,发货量,本月发货量,本年发货量,数据1,数据2,数据3,本日库存量,正常可发量,期末未提数 FROM [sheet1$A3:Q999] WHERE 本日库存量<>Null " StrSql = StrSql & "Union all SELECT 属地 & ' 小计' ,'','',sum(安全容量),sum(空容量) ,sum(进货量),sum(本月进货量),sum(本年进货量),sum(发货量),sum(本月发货量),sum(本年发货量), sum(数据1),sum(数据2),sum(数据3),sum(本日库存量),sum(正常可发量),sum(期末未提数) FROM [sheet1$A3:Q999] WHERE 本日库存量<> Null GROUP BY 属地 " StrSql = StrSql & "Union all SELECT '总计' as Temp,'','',sum(安全容量),sum(空容量) ,sum(进货量),sum(本月进货量),sum(本年进货量),sum(发货量),sum(本月发货量),sum(本年发货量), sum(数据1),sum(数据2),sum(数据3),sum(本日库存量),sum(正常可发量),sum(期末未提数) FROM [sheet1$A3:Q999] WHERE 本日库存量<> Null " StrSql = StrSql & " Order by 属地" Set TempData = MyData.Execute(StrSql) Sheet2.Range("A2:Q1000").ClearContents Sheet2.[A2].CopyFromRecordset TempData
Set MyData = Nothing: Set TempData = Nothing
End Sub
执行红色代码前,一切数据都是对的.按理说红色代码是排序的代码,它可以把带"小计"的给分别添加到属地的最后,可实际上执行了后是乱序的,第一个是威海,后面是总计,潍坊,.......完全不是正常的次序,我搞了半天,没能想明白.请各位好心人给分析一下原因,及解决的方法. |