回答

收藏

从宏查询(加入)外部wokbooks

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

我有3个Excel工作簿:
1 U5 Z1 [/ B* m宏(完成后将作为外接程序)   z% E: _) i; U
前期数据清单 , \/ G8 Y! C1 F6 ^& O
当前期间数据列表
1 ?# X4 }! g& n5 \9 {这两个列表均少于1000行。) h4 M9 \7 \$ z! S

, M7 v; C+ m1 u$ w我正在尝试join在这些列表之间创建一个SQL ,但无法正常工作。由于工作表名称中包含点(例如“ TB 03.18”),因此我使用了技巧-
$ r8 a( I- A# G6 ]# w, c+ y在SO的某处找到-在相应的工作簿中定义命名范围。
6 n! }8 l# [/ l5 U! d; \! n下面的代码包含有效的2条SQL信息和给出错误的1条信息。我搞不清楚了。& z3 t- T. K, }! P
'set connection to 'current tb'
6 v# c. k5 w5 `( q4 g& U1 F$ |sConn = &quotrovider=Microsoft.ACE.OLEDB.12.0;Data Source=" & wbCurr.FullName & _
3 y6 D. f% t7 Z& Y2 M; F4 f        ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
' X- O$ ~5 I) Z* ~" \- n% F! F* w0 ^Set con = New ADODB.Connection" `# u+ V- ]* \8 R
con.Open sConn
9 K8 W: I1 z% I$ u2 v- ~4 DwbCurr.Names.Add Name:="cur", RefersTo:=shCurr.Range("A4").CurrentRegion    'to be made dynamic !!!" w, c" w! h) z
wbPrev.Names.Add Name:="pre", RefersTo:=shPrev.Range("A9").CurrentRegion    'to be made dynamic !!!* X. a6 M$ t! W  ~' Z
lastRow = shPrev.Range("a15000").End(xlUp).Row8 h0 E1 C8 Z: b
shCurr.Range("F5:I15000").Clear% U' B8 R( ]8 z! Q
Dim xl12 As String: xl12 = "[Excel 12.0rovider=Microsoft.ACE.OLEDB.12.0;Extended Properties='HDR=YES';] "
6 J$ [: D3 f  g' w
4 m4 g. b; a* W% Z'this works ------------------
' f* Y0 s6 p! S& A" n'sSql = "select reference from  cur " & vbCrLf & _6 U2 {4 D/ H  D. O
       "where cur.reference like '1%'"
1 n2 }* I; @# L* `" K0 U% @'this works ------------------+ e) M% A  F; W& ^9 y
sSql = "select pre.reference  " & vbCrLf & _
2 B! m2 ~9 N9 _8 b       "from pre IN '" & wbPrev.FullName & "' " & xl12 & vbCrLf & _
5 c8 f7 i& `3 C5 K: a& w       "where pre.reference like '1%'"5 j+ ]9 d: A0 B* k% e
'not working: syntax error in FROM clause( B; H7 x3 T- ?) u4 R* ~; @
'sSql = "select cur.reference from  cur " & vbCrLf & _
" V: y" J4 C5 h" ~* ~! T$ l$ ]       "inner join pre IN '" & wbPrev.FullName & "' " & xl12 & " on cur.reference = pre.reference " & vbCrLf & _
- x" Y; t% U8 b       "where cur.reference like '1%'"% C5 ]0 E3 D, `5 ]/ b) J3 X3 Y. b
Debug.Print Now, sSql
3 \2 f( k4 f  P3 ?5 kSet rs = con.Execute(sSql), ]/ ^2 ]- {1 B0 w& m
                ( S( y, |" `, k" ?, K7 w, T
解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则