回答

收藏

从宏查询(加入)外部wokbooks

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

我有3个Excel工作簿:
+ p( f, m  Y0 ]& z# A宏(完成后将作为外接程序) ! m3 ^4 ^4 g  Z# ~# r+ N
前期数据清单
* V2 o' u% s; D当前期间数据列表4 k! K, D& Q9 w% V- G: G
这两个列表均少于1000行。! J% I) l- [; A/ {

# t  T3 j5 Q) o$ M5 y' ]. u我正在尝试join在这些列表之间创建一个SQL ,但无法正常工作。由于工作表名称中包含点(例如“ TB 03.18”),因此我使用了技巧-
+ O) k5 }3 c( t5 R/ u6 ]: P在SO的某处找到-在相应的工作簿中定义命名范围。
% C; ?1 j1 Y2 [& x$ j下面的代码包含有效的2条SQL信息和给出错误的1条信息。我搞不清楚了。
5 Z1 f; ]5 X1 b) I3 p" Y'set connection to 'current tb'. }  U8 f1 P. Y" R" o
sConn = &quotrovider=Microsoft.ACE.OLEDB.12.0;Data Source=" & wbCurr.FullName & _+ j! H9 r: u" M" b& G# A
        ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"9 ?* t2 U+ S4 u# }" R
Set con = New ADODB.Connection
7 S, H/ b* Y! O( l9 [con.Open sConn
4 T& o8 a# J1 A7 jwbCurr.Names.Add Name:="cur", RefersTo:=shCurr.Range("A4").CurrentRegion    'to be made dynamic !!!* b6 B9 }/ d: r3 K% p8 n& L: m8 |2 p* u
wbPrev.Names.Add Name:="pre", RefersTo:=shPrev.Range("A9").CurrentRegion    'to be made dynamic !!!7 R. w) l3 i3 Z2 R# v
lastRow = shPrev.Range("a15000").End(xlUp).Row
3 p/ C  ]3 u0 F* BshCurr.Range("F5:I15000").Clear, W3 j& p- d' B( K4 l
Dim xl12 As String: xl12 = "[Excel 12.0rovider=Microsoft.ACE.OLEDB.12.0;Extended Properties='HDR=YES';] "
1 g" Y7 D0 [  F
9 _& V; S( ?1 d9 p9 b'this works ------------------, {8 C" k- |8 w# X7 B
'sSql = "select reference from  cur " & vbCrLf & _( x& y. N1 s$ L- J
       "where cur.reference like '1%'"8 o8 J9 g; ]9 \
'this works ------------------* O5 Z  t& S& w0 `2 g, M# |! M5 E) s
sSql = "select pre.reference  " & vbCrLf & _/ Y* t4 v. {9 {6 @
       "from pre IN '" & wbPrev.FullName & "' " & xl12 & vbCrLf & _2 ~  ^1 ^( Z  c9 T9 Y0 Q4 o) i
       "where pre.reference like '1%'"
1 _% Y2 Q! ^. I8 s'not working: syntax error in FROM clause1 c5 M& `, m0 |0 p$ X# Y3 j
'sSql = "select cur.reference from  cur " & vbCrLf & _, G$ l* @& Q/ w$ I" L" g1 {+ J
       "inner join pre IN '" & wbPrev.FullName & "' " & xl12 & " on cur.reference = pre.reference " & vbCrLf & _
  [  N/ o. P2 u       "where cur.reference like '1%'"$ \, M- \' f/ _3 z+ V, N9 s
Debug.Print Now, sSql, k/ n5 X- `7 L7 D
Set rs = con.Execute(sSql)8 s* b0 |% G: [5 i3 G
               
2 B9 \9 X; o/ V! O& s+ Y! M解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则