Excel精英培训网

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

为何工作簿中正好有张表65536行就不会总了呢?

[复制链接]
发表于 2013-10-19 14:17 | 显示全部楼层 |阅读模式
5学分
本帖最后由 棋行天下黄 于 2013-10-19 21:44 编辑

Sub test()
On Error Resume Next
Dim i As Integer
Rows("2:1048576").ClearContents
With ThisWorkbook.Sheets(1)
Set fso = CreateObject("scripting.filesystemobject")
Set ff = fso.getfolder(ThisWorkbook.Path)
For Each f In ff.Files
  If Not f.Name Like "*" & ThisWorkbook.Name & "*" Then
     Workbooks.Open f
    For i = 1 To Sheets.Count

    Sheets(i).Select
     tr = .[n1048576].End(xlUp).Row + 1

    ActiveSheet.UsedRange.Copy .Range("b" & tr)
    Next i

    ActiveWorkbook.Close False
  End If
Next f




End With

End Sub
工作簿是03版的EXCELL,宏是2010版,工作簿中有张表正好是65536行,那个表就没汇总粘贴,非要删掉最好一行才行,最后汇总到13万条,就差那65536条,是何原因,程序如何改写?附件太大60M不能上传。

发表于 2013-10-19 14:30 | 显示全部楼层
Rows("2:1048576").ClearContents
在2003 能执行吗?执行不了啊
On Error Resume Next去掉再运行
回复

使用道具 举报

发表于 2013-10-19 14:32 | 显示全部楼层
回复

使用道具 举报

发表于 2013-10-19 14:39 | 显示全部楼层
2003版限制了最大行数为65536行,所以不行哦。
回复

使用道具 举报

 楼主| 发表于 2013-10-19 17:12 | 显示全部楼层
qcw811206 发表于 2013-10-19 14:30
Rows("2:1048576").ClearContents
在2003 能执行吗?执行不了啊
On Error Resume Next去掉再运行

宏是2010的excell,既支持1048576条
回复

使用道具 举报

 楼主| 发表于 2013-10-19 17:16 | 显示全部楼层
xuyouxm 发表于 2013-10-19 14:39
2003版限制了最大行数为65536行,所以不行哦。

解答不对呀,我的宏所在的EXCELL是2010的,支持1048576条呀
回复

使用道具 举报

 楼主| 发表于 2013-10-19 17:16 | 显示全部楼层
qcw811206 发表于 2013-10-19 14:32
再者 2003最多65536行

解答不对,我是张贴到2010上,支持1048576条的
回复

使用道具 举报

发表于 2013-10-19 18:14 | 显示全部楼层
棋行天下黄 发表于 2013-10-19 17:16
解答不对,我是张贴到2010上,支持1048576条的

贴上去的可能不行吧,或者是要改代码重新修改了。
回复

使用道具 举报

 楼主| 发表于 2013-10-19 21:43 | 显示全部楼层
正确答案 分两次复制
普通浏览复制代码

  • Sub test()
  •     On Error Resume Next
  •     Dim i As Integer, rng As Range
  •     Rows("2:1048576").ClearContents
  •     With ThisWorkbook.Sheets(1)
  •         Set fso = CreateObject("scripting.filesystemobject")
  •         Set ff = fso.getfolder(ThisWorkbook.Path)
  •         For Each f In ff.Files
  •             If Not f.Name Like "*" & ThisWorkbook.Name & "*" Then
  •             Workbooks.Open f
  •                 For i = 1 To Sheets.Count
  •                     tr = .[n1048576].End(xlUp).Row + 1
  •                     Set rng = Sheets(i).UsedRange
  •                     If rng.Rows.Count < 65536 Then
  •                         rng.Copy .Range("b" & tr)
  •                     Else
  •                         rng.Resize(65535).Copy .Range("b" & tr)
  •                         rng.Rows(65536).Copy .Range("b" & tr + 65535)
  •                     End If
  •                 Next i
  •                 ActiveWorkbook.Close False
  •             End If
  •         Next f
  •     End With
  • End Sub




回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 13:07 , Processed in 0.260987 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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