回答

收藏

从宏查询(加入)外部wokbooks

技术问答 技术问答 388 人阅读 | 0 人回复 | 2023-09-11

我有3个Excel工作簿:
7 N% }4 J; |1 a' d+ ?宏(完成后将作为外接程序) + z+ ^8 C. U" ]3 [0 Y& `7 ~$ E
前期数据清单 # X: `& p7 h  C+ x  z. }
当前期间数据列表
. K" n: v# i0 ^' _% t7 K& U这两个列表均少于1000行。% k( [' b7 |. U# O* j7 O5 |) n3 l
8 W; J$ B% Z* ?+ e: `8 W
我正在尝试join在这些列表之间创建一个SQL ,但无法正常工作。由于工作表名称中包含点(例如“ TB 03.18”),因此我使用了技巧-
* h" [' o7 G1 |7 B3 D+ r. V  j在SO的某处找到-在相应的工作簿中定义命名范围。
+ }) S  @; W8 i: [0 B5 o% b/ n下面的代码包含有效的2条SQL信息和给出错误的1条信息。我搞不清楚了。
( E; d, @5 y& X! Q1 D'set connection to 'current tb'
  a* M) A5 H# G) t8 LsConn = &quotrovider=Microsoft.ACE.OLEDB.12.0;Data Source=" & wbCurr.FullName & _
" Q0 e/ G1 N7 W+ v5 g: p3 v+ P, X        ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
- C: Y" k( m  m/ Y1 ~- gSet con = New ADODB.Connection/ A% G. A+ f. f
con.Open sConn
3 i# p5 D6 l2 h! ?: S. kwbCurr.Names.Add Name:="cur", RefersTo:=shCurr.Range("A4").CurrentRegion    'to be made dynamic !!!7 t2 [% x3 g; Q. S' O1 J+ J* ^9 e; _, _
wbPrev.Names.Add Name:="pre", RefersTo:=shPrev.Range("A9").CurrentRegion    'to be made dynamic !!!
; W! s$ N3 ?/ M0 T: ~$ x( [' TlastRow = shPrev.Range("a15000").End(xlUp).Row* L5 z8 m# ]4 {& N
shCurr.Range("F5:I15000").Clear
9 a! F  l7 e& [* J/ zDim xl12 As String: xl12 = "[Excel 12.0rovider=Microsoft.ACE.OLEDB.12.0;Extended Properties='HDR=YES';] "! H9 L6 [% h5 J7 K( Z) c
: ?8 \2 s2 I" |# i( \# n: S: ~9 M% e
'this works ------------------0 c/ z2 O3 j: ?' {
'sSql = "select reference from  cur " & vbCrLf & _! b, a& O1 J8 a& H: x
       "where cur.reference like '1%'"- S% ]1 w" E2 A& F# G1 L  Z' r
'this works ------------------
4 C! E/ Q! J( O  G' f) U* E( Z  BsSql = "select pre.reference  " & vbCrLf & _  a+ N6 K( M3 m9 |: f  y
       "from pre IN '" & wbPrev.FullName & "' " & xl12 & vbCrLf & _
3 q8 X0 s7 h  G       "where pre.reference like '1%'". P4 A4 n$ O6 S% B0 k, Q" x, F
'not working: syntax error in FROM clause' a! y( M4 F% a
'sSql = "select cur.reference from  cur " & vbCrLf & _
1 k0 Y, ?( K$ S& R       "inner join pre IN '" & wbPrev.FullName & "' " & xl12 & " on cur.reference = pre.reference " & vbCrLf & _5 M- j" ~3 m+ Z8 c# q
       "where cur.reference like '1%'": Z* b3 }1 s; ]  Z( [+ @" v
Debug.Print Now, sSql
; F4 `3 P$ b5 T7 iSet rs = con.Execute(sSql); m: p+ E; x! n. W- M1 D
               
$ I. D% T- x9 E$ C4 A& s解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则