Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5501|回复: 19

【VBA每日一题】2:ADO初接触

[复制链接]
发表于 2007-4-22 15:35 | 显示全部楼层 |阅读模式
<p>在第一题的基础上,开始练习如何在EXCEL下使用ADO查询数据,要求如下:</p><p>1、建立一个ADO联接,以本工作表为数据库;</p><p>2、从员工数据表中,筛选出“策划部,女性”成员名单,并将结果输入出到H列,字段名也要输出(须用ADO完成)</p><p>&nbsp;</p><br/>
[此贴子已经被作者于2007-4-22 15:36:14编辑过]
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2007-4-22 16:29 | 显示全部楼层
回复

使用道具 举报

发表于 2007-4-22 17:20 | 显示全部楼层

<p></p><p><strong><font color="#0000ff">但是有个地方不知如何处理,如果姓名为数字如502,则在查询后为空白,不知如何解决,请指教.</font></strong></p><p>代码如下:</p><p>Sub 自选图形1_单击()<br/>Application.ScreenUpdating = False<br/>Dim CNN As New ADODB.Connection<br/>Set CNN = CreateObject("adodb.connection")<br/>CNN.Open "rovider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" &amp; ActiveWorkbook.FullName<br/>[h1:l65536].ClearContents<br/>Sql = "select * FROM[员工信息表$] WHERE 部门='策划部' AND 性别= '女'"<br/>[A1:E1].Copy [H1]<br/>[H2].CopyFromRecordset CNN.Execute(Sql)<br/>CNN.Close<br/>Set CNN = Nothing<br/>End Sub</p><p><strong><font color="#3300ff">1、502查询为空,是本题要考查的一个小知识点,稍后讲解</font></strong></p><p><strong><font color="#3300ff">2、字段名要求用ADO取得,不是用直接复制的方法,再思考&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></strong></p><p><font color="#3300ff"><strong>3、</strong><font color="#000000">Dim CNN As<strong><font color="#ff0033"> New</font></strong> ADODB.Connection</font><strong>&nbsp;后CNN就可以直接用了,不用再</strong><font color="#000000">Set CNN =<strong><font color="#ff0066"> CreateObject</font></strong>("adodb.connection")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><strong>烟雨江南4/22<br/></strong></font>&nbsp;</p>
[此贴子已经被烟雨江南于2007-4-22 17:28:31编辑过]
回复

使用道具 举报

发表于 2007-4-22 17:42 | 显示全部楼层

<p>又看了一遍题目要求,发现字段名也要用ADO查询,</p><p>翻遍贴子发现添加如下代码</p><p><br/>Sub 自选图形2_单击()<br/>Application.ScreenUpdating = False<br/><strong><font color="#ff0033">Dim rst As New ADODB.Recordset</font></strong><br/>Dim CNN As New ADODB.Connection<br/>Set CNN = CreateObject("adodb.connection")<br/>CNN.Open "rovider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" &amp; ActiveWorkbook.FullName<br/>[h1:l65536].ClearContents<br/>Sql = "select * FROM[员工信息表$] WHERE 部门='策划部' AND 性别= '女'"<br/>[H2].CopyFromRecordset CNN.Execute(Sql)<br/><font color="#ff0033"><strong>For i = 1 To rst.Fields.Count<br/>&nbsp;&nbsp;&nbsp; PARA = rst.Fields(i - 1).Name<br/>Cells(1, i+7) = PARA<br/>Next</strong></font><br/>CNN.Close<br/>Set CNN = Nothing<br/>Application.ScreenUpdating = True<br/>End Sub</p><p>但是就是无法返回要求的字段名,只返回空值,不知那错了,请高手指教.</p>
[此贴子已经被作者于2007-4-22 17:57:17编辑过]
回复

使用道具 举报

发表于 2007-4-22 18:26 | 显示全部楼层

ADO是什么啊.偶的VBA实在不好啊~![em03]
回复

使用道具 举报

 楼主| 发表于 2007-4-22 20:06 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>MXQCHINA</i>在2007-4-22 17:42:35的发言:</b><br/><p>Sub 自选图形2_单击()<br/>Application.ScreenUpdating = False<br/><strong><font color="#ff0033">Dim rst As New ADODB.Recordset</font></strong><br/>Dim CNN As New ADODB.Connection<br/>CNN.Open "rovider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" &amp; ActiveWorkbook.FullName<br/>[h1:l65536].ClearContents<br/>Sql = "select * FROM[员工信息表$] WHERE 部门='策划部' AND 性别= '女'"</p><p>rst.open sql,cnn<br/><br/><font color="#ff0033"><strong>For i = 1 To rst.Fields.Count<br/>&nbsp;&nbsp;&nbsp; Cells(1, i+7) = rst.Fields(i - 1).Name<br/>Next</strong></font></p><p><strong><font color="#ff0033"></font></strong>[H2].CopyFromRecordset CNN.Execute(Sql)<br/>CNN.Close<br/>Set CNN = Nothing<br/>Application.ScreenUpdating = True<br/>End Sub</p></div><p>试一下这样</p>
回复

使用道具 举报

发表于 2007-4-22 20:26 | 显示全部楼层

又出新问题了?

<p><br/></p><p>标题行多出了F6,F7,F8,F9,F10,F11,F12?</p><p>如何解决?</p>[em04]
回复

使用道具 举报

 楼主| 发表于 2007-4-22 20:47 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>lpz001</i>在2007-4-22 20:26:44的发言:</b><br/><p><br/></p><p>标题行多出了F6,F7,F8,F9,F10,F11,F12?</p><p>如何解决?</p>[em04]</div><p>&nbsp;Sql = "select * from [员工信息表$A:E] where 性别='女' and 部门='策划部'"<br/>&nbsp;或:Sql = "select * from 员工资料 where 性别='女' and 部门='策划部'" </p><p>EXCEL下须指定数据区域,除非你确认,除你认为的数据区域处,别处未操作过,否则应指定区域大小</p>
回复

使用道具 举报

发表于 2007-4-22 20:56 | 显示全部楼层

谢谢,学习了![em01]
回复

使用道具 举报

发表于 2007-4-22 21:02 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>lpz001</i>在2007-4-22 20:26:44的发言:</b><br/><p><br/></p><p>标题行多出了F6,F7,F8,F9,F10,F11,F12?</p><p>如何解决?</p>[em04]</div><p>CNN.Open "rovider=Microsoft.Jet.OLEDB.4.0;Extended Properties=<strong><font color="#ff0000" style="BACKGROUND-COLOR: #00ff00;">'</font></strong>Excel 8.0<font color="#ff0000" style="BACKGROUND-COLOR: #00ff00;"><strong>;imex=1</strong></font>';Data Source=" &amp; ActiveWorkbook.FullName<br/>[h1:l65536].ClearContents<br/>Sql = "select * FROM[员工信息表$A:E] WHERE 部门='策划部' AND 性别= '女'"<br/></p><p>奇怪只多标记颜色的内容,就解决了我的疑问,神奇,想知道原理。</p>
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-19 21:55 , Processed in 0.259623 second(s), 3 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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