Excel精英培训网

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

[已解决]请问我的代码出错了,是什么原因?

[复制链接]
发表于 2013-4-15 12:32 | 显示全部楼层 |阅读模式
我的附件有两段代码,“输出“与”输出1“。两段代码原理功能都是一样,只是源数据的区域不同。所以两段代码只是区域的那句代码有不同,其他都是一样的。结果”输出1“没有问题,而”输出“就出错了,请老师看一下是什么原因。
而”输出“出错那句代码Range("c2").Resize(d.Count) = Application.Transpose(d.Items),我改用arr4=d.items,然后再循环把arr4的元素赋值到单元格。也没有出错。 样版.rar (18.44 KB, 下载次数: 4)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-4-15 13:17 | 显示全部楼层
出错是超长了,单个字符串长度不能超过255.
在用TRANSPOSE转置的时候。

回复

使用道具 举报

发表于 2013-4-15 13:19 | 显示全部楼层
回复

使用道具 举报

发表于 2013-4-15 13:19 | 显示全部楼层
  1.     Dim k1
  2.     For Each k1 In d.Keys
  3.         Debug.Print Len(d(k1))
  4.         d(k1) = Left(d(k1), 255)
  5.     Next
  6.     Stop
复制代码
你在转置前加个这个,一测就知道了。
回复

使用道具 举报

发表于 2013-4-15 13:21 | 显示全部楼层
QQ截图20130415132132.jpg
回复

使用道具 举报

发表于 2013-4-15 13:26 | 显示全部楼层
本帖最后由 hwc2ycy 于 2013-4-15 13:30 编辑

另外如果字典里COUNT大于65536(好像是这么多,以前在论坛答题时也碰到过),转置也要出错。
  1. Sub test()
  2.     Dim dic As Object
  3.     Set dic = CreateObject("scripting.dictionary")
  4.     Dim i As Long
  5.     For i = 1 To 65537
  6.         dic(i) = i
  7.     Next
  8.     Range("a1").Resize(dic.Count) = WorksheetFunction.Transpose(dic.items)
  9.     Set dic = Nothing
  10. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-4-15 13:40 | 显示全部楼层
hwc2ycy 发表于 2013-4-15 13:17
出错是超长了,单个字符串长度不能超过255.
在用TRANSPOSE转置的时候。

谢谢老师的指导,之前也考虑过超出255的问题,不过因为用arr4=d.items后,再循环赋值给单元格,没有出错。赋值后的单元格字符串也有超出255个字符的。
那就不是单元格不能超出是255字符,是TRANSPOSE转置不了超255的字符。
谢谢指导。
回复

使用道具 举报

发表于 2013-4-15 13:45 | 显示全部楼层    本楼为最佳答案   
本帖最后由 hwc2ycy 于 2013-4-15 13:46 编辑
mfk1288 发表于 2013-4-15 13:40
谢谢老师的指导,之前也考虑过超出255的问题,不过因为用arr4=d.items后,再循环赋值给单元格,没有出错。 ...

单元格内是1024嘛。
是TRANSPOSE转置时的限制了。

恩,直接赋值是可以的。
不过单元格内貌似放太多东东也就显得杂乱了。

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 23:38 , Processed in 0.596043 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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