42921783 发表于 2014-3-5 21:06
目的市唯一作用(有明确指向),在于惠州发惠州用顺丰,如1850行,订单重量6公斤,运费=首重收费8+(重量 ... - Sub Macro1()
- Dim cnn, SQL$, a, arr, brr(), i&, j&, s$, d As Object, ds As Object
- Set d = CreateObject("scripting.dictionary")
- Set ds = CreateObject("scripting.dictionary")
- arr = [a1].CurrentRegion
- ReDim brr(2 To UBound(arr), 1 To 1)
- For i = 2 To UBound(arr)
- s = arr(i, 8) & arr(i, 7) & arr(i, 5) & arr(i, 1)
- d(s) = d(s) & "," & i
- s = arr(i, 8) & arr(i, 7) & arr(i, 5) & arr(i, 1) & arr(i, 6)
- ds(s) = ds(s) & "," & i
- Next
- Set cnn = CreateObject("adodb.connection")
- cnn.Open "Provider=Microsoft.ace.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ActiveWorkbook.FullName
- SQL = "select a.订单重量,a.订单运费,a.订单编码,a.重量,a.目的省,a.目的市,a.快递公司,a.库房编码,b.首重收费,b.重量,b.首重,b.首重收费,b.续重1KG,b.上门服务费,b.目的市 from [订单$" _
- & [a1].CurrentRegion.Address(0, 0) & "] a left join [运费标准$] b on a.库房编码=b.库房编码 and a.快递公司=b.快递公司 and a.目的省=b.目的省"
- arr = cnn.Execute(SQL).GetRows
- For i = 0 To UBound(arr, 2)
- If Not IsNull(arr(0, i)) Then
- If Application.Evaluate(arr(0, i) & arr(9, i)) Then
- If arr(14, i) <> "省内所有" Then
- a = Split(ds(arr(7, i) & arr(6, i) & arr(4, i) & arr(0, i) & arr(14, i)), ",")
- For j = 1 To UBound(a)
- brr(Val(a(j)), 1) = arr(11, i) + (arr(0, i) - arr(10, i)) * arr(12, i) + arr(13, i)
- Next
- Else
- a = Split(d(arr(7, i) & arr(6, i) & arr(4, i) & arr(0, i)), ",")
- For j = 1 To UBound(a)
- If brr(Val(a(j)), 1) = "" Then brr(Val(a(j)), 1) = arr(11, i) + (arr(0, i) - arr(10, i)) * arr(12, i) + arr(13, i)
- Next
- End If
- End If
- End If
- Next
- [b2].Resize(UBound(brr) - 1) = brr
- cnn.Close
- Set cnn = Nothing
- End Sub
复制代码 |