回答

收藏

从宏查询(加入)外部wokbooks

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

我有3个Excel工作簿:+ G& ]( U* T3 q9 x9 c9 G0 `( M
宏(完成后将作为外接程序)
! f- k; o5 Y# L6 n8 K( a前期数据清单
# ^+ J* H8 p/ Y; C" g当前期间数据列表
& z. e) w+ u6 X这两个列表均少于1000行。7 A* |( m$ k+ [" Z. l; E; x- _8 k: {

6 E0 x* }6 c; s% R' }6 y我正在尝试join在这些列表之间创建一个SQL ,但无法正常工作。由于工作表名称中包含点(例如“ TB 03.18”),因此我使用了技巧-2 v& x$ a$ L- N' ]( ]) [( {  m
在SO的某处找到-在相应的工作簿中定义命名范围。9 x2 ^6 K) P7 h% B
下面的代码包含有效的2条SQL信息和给出错误的1条信息。我搞不清楚了。
% g8 ^. |0 G4 c* t, q'set connection to 'current tb'% H% q0 i, `2 x2 [2 Y. I, A% d
sConn = &quotrovider=Microsoft.ACE.OLEDB.12.0;Data Source=" & wbCurr.FullName & _
0 h4 h! q3 w/ K1 T        ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"+ G& l" L' ~6 h2 j
Set con = New ADODB.Connection9 O  |* M. Z/ m  l, f# }& ?" c
con.Open sConn
) Q3 V1 z) F" i6 Y% ?5 I, IwbCurr.Names.Add Name:="cur", RefersTo:=shCurr.Range("A4").CurrentRegion    'to be made dynamic !!!' J4 k) v) n6 c: a$ d, g% w0 g
wbPrev.Names.Add Name:="pre", RefersTo:=shPrev.Range("A9").CurrentRegion    'to be made dynamic !!!
" e( H( S! J$ v1 slastRow = shPrev.Range("a15000").End(xlUp).Row. v, k: R6 K9 d+ p0 d& p
shCurr.Range("F5:I15000").Clear
2 N5 O6 J# r; G. N6 LDim xl12 As String: xl12 = "[Excel 12.0rovider=Microsoft.ACE.OLEDB.12.0;Extended Properties='HDR=YES';] "
3 L; s! m1 ?' X4 \- ^! l
: F. D* F/ K3 a/ n3 N3 P8 k'this works ------------------
& W( ^# p. L3 [. C+ D'sSql = "select reference from  cur " & vbCrLf & _1 R2 B4 w2 z, l: k# P  m
       "where cur.reference like '1%'"- H- n% r+ W. r! `  F- k
'this works ------------------1 f5 C* e; D' o" [7 L
sSql = "select pre.reference  " & vbCrLf & _+ X# Z" S6 X" j: i2 w+ A6 ^
       "from pre IN '" & wbPrev.FullName & "' " & xl12 & vbCrLf & _
2 c5 F5 x. Q' Z$ ~  P' n* X: T& w9 g. p       "where pre.reference like '1%'"( q2 X9 K: _/ |7 r: @$ K1 a
'not working: syntax error in FROM clause$ i1 S$ O, g: f
'sSql = "select cur.reference from  cur " & vbCrLf & _3 J( r2 D* X$ N$ x  D4 |
       "inner join pre IN '" & wbPrev.FullName & "' " & xl12 & " on cur.reference = pre.reference " & vbCrLf & _
0 g3 k1 \1 [2 z! x1 R6 g$ ^       "where cur.reference like '1%'"
% r. F6 w2 H4 Z/ ADebug.Print Now, sSql
% q9 m0 q  k9 {  p, j8 ~, CSet rs = con.Execute(sSql)
! M  [% H1 C8 U- `. A% U: z! g: K                ( _4 h' m) T# c* N, a
解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则