VBA 把Excel表当做一个大数据库来操作

VBA 把Excel表当做一个大数据库来操作

python 复制代码
Sub SqlQueryBJD(strBillNo As String)

Dim strSql As String
Dim arrCol() As String
Dim strLineWhere
Dim arrWhere() As String
Dim strWhereVal As String

Dim strResultShowRng As String
Dim strWhereRng As String
Dim strShowResultRowRng As String
Dim strShowResultRowMsg As String

Dim strSqlSb As String
Dim wsDbQ As Worksheet
Dim sqlSb As New StringBulider

On Error GoTo er:

'日期,单号,直接费用,管理费,税率,税金,合计,报价单抬头,工程名称,提交单位,客户名称,地址,电话,施工面积,备注,项目类别,项目名称,数量,单位,材料单价,材料合价,人工单价,人工合价,工艺说明,材料成本,材料加价,材料利润,人工成本,人工加价,人工利润,单项利润人工单价    人工合价    工艺说明    材料成本    材料加价    材料利润    人工成本    人工加价    人工利润    单项利润

sqlSb.Append ("select rowNo,项目类别,项目名称,数量,单位,材料单价,材料合价,工艺说明")
sqlSb.Append (" from (")

sqlSb.Append ("select rowNo,项目类别&0 as 项目类别,项目名称,'t1' as 数量,'' as 单位,'' as 材料单价,'' as 材料合价,'' as 工艺说明 from [报价单记录$B1:AG]")
sqlSb.Append (" where 项目名称<>'' And cdbl(iif(数量 is null,0,数量))=0 ")
sqlSb.Append (" and 单号='" & strBillNo & "'")

sqlSb.Append ("union all select rowNo,项目类别&1,项目名称,数量,单位,材料单价,材料合价,工艺说明 from [报价单记录$B1:AG]")
sqlSb.Append (" where 项目名称<>'' And cdbl(iif(数量 is null,0,数量))>0")
sqlSb.Append (" and 单号='" & strBillNo & "'")

sqlSb.Append ("union all select max(rowNo),项目类别&2,'小计' as 项目名称,'t2' as 数量,'' as 单位,sum(iif(材料合价 is null,0,材料合价)) as 材料单价,'' as 材料合价,'' as 工艺说明 from [报价单记录$B1:AG]")
sqlSb.Append (" where 项目名称<>'' And cdbl(iif(数量 is null,0,数量))>0")
sqlSb.Append (" and 单号='" & strBillNo & "'")
sqlSb.Append (" group by 项目类别")

sqlSb.Append (" ) as tbz")

sqlSb.Append (" order by rowNo,项目类别")

strSql = sqlSb.ToString()

strResultShowRng = "A1:P?"
strWhereRng = "Format(日期,'yyyy-MM-dd')>=:B2:D|Format(日期,'yyyy-MM-dd')<=:C2:D|单号 like:B3:S|工程名称 like:E2:S|客户名称 like:E3:S|地址 like:G2:S|电话 like:G3:S"
strShowResultRowRng = ""
strShowResultRowMsg = ""
 

 
    Set wsDbQ = Worksheets("tempBjqdData")
     
'    arrCol = Split(strWhereRng, "|")
'
'
'    For Each strLineWhere In arrCol
'      arrWhere = Split(strLineWhere, ":")
'      strWhereVal = wsDbQ.Range(arrWhere(1)).Value
'
'      If Trim(strWhereVal) <> "" Then
'        strSqlSb = strSqlSb & " and " & arrWhere(0) & GetSqlVal(arrWhere(0), strWhereVal, arrWhere(2))
'      End If
'    Next strLineWhere
    
    Call SqlADODBQuery("tempBjqdData", strResultShowRng, strSql, strShowResultRowRng, strShowResultRowMsg)
    

 Exit Sub
er:
 MsgBox err.Description
 
End Sub
相关推荐
RestCloud10 小时前
SQL Server到Hive:批处理ETL性能提升30%的实战经验
数据库·api
RestCloud10 小时前
为什么说零代码 ETL 是未来趋势?
数据库·api
ClouGence12 小时前
CloudCanal + Paimon + SelectDB 从 0 到 1 构建实时湖仓
数据库
葡萄城技术团队17 小时前
从100秒到10秒的性能优化,你真的掌握 Excel 的使用技巧了吗?
excel
DemonAvenger19 小时前
NoSQL与MySQL混合架构设计:从入门到实战的最佳实践
数据库·mysql·性能优化
AAA修煤气灶刘哥1 天前
后端人速藏!数据库PD建模避坑指南
数据库·后端·mysql
RestCloud1 天前
揭秘 CDC 技术:让数据库同步快人一步
数据库·api
得物技术2 天前
MySQL单表为何别超2000万行?揭秘B+树与16KB页的生死博弈|得物技术
数据库·后端·mysql
可涵不会debug2 天前
【IoTDB】时序数据库选型指南:工业大数据场景下的技术突围
数据库·时序数据库
ByteBlossom2 天前
MySQL 面试场景题之如何处理 BLOB 和CLOB 数据类型?
数据库·mysql·面试