ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: dxy27

希望用SQL复制解决工作上的问题,您能帮我吗?

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-3-2 19:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
QUOTE:
以下是引用TGB在2007-3-2 13:08:12的发言:

哪你就把代码拷过去试下,我这里没问题

拷贝到我的表中测试成功,其他朋友的正在测试,谢谢TGB和所有朋友!

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-3-2 19:59 | 显示全部楼层
QUOTE:
以下是引用TGB在2007-3-2 8:24:47的发言:

俺对这个东东很菜,学着修改了一下你的附件

QUOTE:
还有几个问题,请问一下:
QUOTE:
 sh好象没有定义过,怎么直接调用呢?另外GoTo ooo中ooo是什么呀?
Sub Copydata()
    Dim u As String
    Dim path As String
    Dim mycat As New ADOX.Catalog, i As Integer, msg As String
    Dim sh As Worksheet, shName$
   
    Set rng = Sheet1.Rows(1)
    mycat.ActiveConnection = _
      "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & _
       ThisWorkbook.path & "\" & "数据.xls" ''"F:\Documents and Settings\stephen\桌面\数据.xls"
   
    For i = 1 To mycat.Tables.Count
              msg = mycat.Tables(i - 1).Name '& vbCrLf
              msg = VBA.Replace(msg, "'", "")
           
              path = ThisWorkbook.path '"F:\Documents and Settings\stephen\桌面\"
              Set conn = CreateObject("adodb.connection")
              conn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;imex=0';data source=" & path & "\数据.xls"
             
              Sql = "select * from [" & msg & "e:x]" '想把YF104(20M0411)换成变量msg,用循环依次让SQL从每个表中取数据
             
              shName = Replace(msg, "$", "")
              For Each sh In ThisWorkbook.Sheets
                  If sh.Name = shName Then
                     sh.[b1].CopyFromRecordset conn.Execute(Sql)
                     rng.Copy sh.[a1]
                     GoTo ooo
                  End If
              Next
              ThisWorkbook.Sheets.Add.Name = shName
              ThisWorkbook.Sheets(shName).[b1].CopyFromRecordset conn.Execute(Sql)
              rng.Copy Sheets(shName).[a1]
ooo:
    Next
    conn.Close:
    Set conn = Nothing
End Sub

TA的精华主题

TA的得分主题

发表于 2007-3-2 21:53 | 显示全部楼层

另外GoTo ooo中ooo是什么呀?

GoTo是循环中的退出语句,当程序执行到这一句时,就会跳到 000后面那一句(本处是 next)

ooo:
    Next

TA的精华主题

TA的得分主题

发表于 2007-3-2 21:56 | 显示全部楼层

Dim sh As Worksheet

在这里已经定义了sh为工作表对象

For Each sh In ThisWorkbook.Sheets  为sh在本工作簿中的所有工作表中循环,当然有时也有不定义的

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-3-3 00:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
QUOTE:
以下是引用向您问好在2007-3-2 21:56:23的发言:

Dim sh As Worksheet

在这里已经定义了sh为工作表对象

For Each sh In ThisWorkbook.Sheets  为sh在本工作簿中的所有工作表中循环,当然有时也有不定义的

以前我总觉得要在所有工作表中循环,需要先取得工作表数量  .COUNT

然后用

FOR i=1 TO .COUNT

SHEETS( i)           做循环,这样用多少有点理解不了

[em06]

TA的精华主题

TA的得分主题

发表于 2007-3-3 08:55 | 显示全部楼层

For Each sh In ThisWorkbook.Sheets  

这个是在工作表集合中循环,用惯了觉得比用for i=1 to sheets.count方便

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-3-3 09:47 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-3-3 10:06 | 显示全部楼层
QUOTE:
以下是引用dxy27在2007-3-3 9:47:15的发言:

ooo

是一句固定用法吗?

不是,只是一种习惯,也可以用HH,KK,LL,是一个标签,也就是说当条件满足时就跳到这里,不执行goto ooo 到 ooo:之间的

代码.ooo:也即标签,需是行中的开头.以下是在工作表中循环,如果已存在这个名字的工作表,执行SQL并跳过新建工作表这段................................................

  For Each sh In ThisWorkbook.Sheets
                  If sh.Name = shName Then
                     sh.[b1].CopyFromRecordset conn.Execute(Sql)
                     rng.Copy sh.[a1]
                    
GoTo ooo
                  End If
              Next
              ThisWorkbook.Sheets.Add.Name = shName
              ThisWorkbook.Sheets(shName).[b1].CopyFromRecordset conn.Execute(Sql)
              rng.Copy Sheets(shName).[a1]
ooo:
    Next

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-3-3 12:22 | 显示全部楼层

解释得非常清楚,再次感谢!

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-10-4 04:33 , Processed in 0.044093 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表