ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: autumnalRain

[求助] GETROWS方法得到的数组为什么不可以直接转置写入到单元格中

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-8-15 12:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 xiaovba 于 2019-8-15 13:03 编辑
huang1314wei 发表于 2015-11-11 13:13
把数组当中的Null值转换成空值,就可以使用Application.Transpose转置否则报错

我现在遇到的情况是sql出来的数据集第一个值是空值,用application.transpose二次转置和一次转值均报错。

我的语句是:

Set rec = cnn.Execute(sql)
      
      arr = rec.GetRows              ‘报错
      Workbooks.Add
      [a1].CopyFromRecordset rec             '没有报错,但是无输出
      [a1].CopyFromRecordset cnn.Execute(sql)                         ’正常输出,显示数据集第一个值是空值,其余值对的
      brr = Application.Transpose(arr)                                      ‘报错,brr是variance类型
      brr=application.transpost(application.transpose(arr))         '报错

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-10 08:35 | 显示全部楼层
GetRows 方法
将 Recordset 对象的多个记录复制到数组中。

语法:array = recordset.GetRows( Rows, Start, Fields )
返回:二维数组。

参数
Rows 可选,长整型表达式,指定要检索记录数。默认值为 adGetRowsRest (-1)。
Start 可选,字符串或长整型,计算得到在 GetRows 操作开始处的记录的书签。也可使用下列 BookmarkEnum 值。
常量 说明
AdBookmarkCurrent 从当前记录开始。
AdBookmarkFirst 从首记录开始。
AdBookmarkLast 从尾记录开始。
Fields 可选,变体型,代表单个字段名、顺序位置、字段名数组或顺序位置号。ADO 仅返回这些字段中的数据。

说明
1、使用 GetRows 方法可将记录从 Recordset 复制到二维数组中。第一个下标标识字段,第二个则标识记录号。当 GetRows 方法返回数据时数组变量将自动调整到正确大小。
2、如果不指定 Rows 参数的值,GetRows 方法将自动检索 Recordset 对象中的所有记录。如果请求的记录比可用记录多,则 GetRows 仅返回可用记录数。
3、如果 Recordset 对象支持书签,则可以通过传送该记录的 Bookmark 属性值,来指定 GetRows 方法将从哪个记录开始检索数据。
4、如要限制 GetRows 调用返回的字段,则可以在 Fields 参数中传送单个字段名/编号或者字段名/编号数组。
5、在调用 GetRows 后,下一个未读取的记录成为当前记录,或者如果没有更多的记录,则 EOF 属性设置为 True.

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-10 08:56 | 显示全部楼层
  1. Sub SQL2Arr()
  2.     Dim AdoCN As Object
  3.     Dim AdoRe As Object
  4.     Dim SQL As String
  5.     Dim Arr1, Arr2, Arr3
  6.     Set AdoCN = CreateObject("ADODB.Connection")
  7.     Set AdoRe = CreateObject("ADODB.Recordset")
  8.     SQL = "SELECT * FROM [成绩表$]"
  9.     AdoCN.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
  10.                  "Data Source=" & ThisWorkbook.FullName & ";" & _
  11.                  "Extended Properties=Excel 12.0;"
  12.     Set AdoRe = AdoCN.Execute(SQL)
  13.     Arr1 = AdoRe.GetRows(, , "姓名")                    '取得某一列
  14.     AdoRe.MoveFirst                                     '取完一次,要将指针移动到最前,否则将提示“BOF或EOF中有一个是“真”,或当前的记录已被删除,所需的操作要求一个当前的记录”
  15.     Arr2 = AdoRe.GetRows(, , Array("姓名", "班级"))     '取得两列
  16.     AdoRe.MoveFirst                                     '取完一次,要将指针移动到最前
  17.     Arr3 = AdoRe.GetRows                                '取得全部
  18.     AdoCN.Close
  19.     Set AdoRe = Nothing
  20.     Set AdoCN = Nothing
  21. End Sub
复制代码
AdoRe.MoveFirst '取完一次,要将指针移动到最前,否则将提示“BOF或EOF中有一个是“真”,或当前的记录已被删除,所需的操作要求一个当前的记录” image.jpg image.jpg
数据源.png
MOVEFIRST.png

getrows用法.rar

14.83 KB, 下载次数: 8

TA的精华主题

TA的得分主题

发表于 2021-11-15 12:23 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2021-11-28 12:53 | 显示全部楼层
剛開始我以為.getrows很好用,後來發覺沒什麼樣,要處理數據,前面有SQL,後面有VBA。

TA的精华主题

TA的得分主题

发表于 2021-12-28 09:39 | 显示全部楼层
zhaogang1960 发表于 2015-11-11 16:12
如果要将查询结果输出到工作表,建议不要使用GetRows方法生成数组再用Transpose转置输出,因为Transpose有 ...

老师,您好,我也想达到SQL输出后直接转置成数组,您说的“建议声明另一个行列与GetRows方数组相反的数组”这种方法具体怎么弄的,怎么声明,能帮忙告知一下吗,谢谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-18 15:39 , Processed in 0.029616 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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