以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [讨论]ws.Copy(Before:=.Item(1))速度慢  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=188442)

--  作者:puma
--  发布时间:2023/9/20 15:39:00
--  [讨论]ws.Copy(Before:=.Item(1))速度慢
需求:打开tb1 
         打开tb2 
         把tb1所有的sheet复制到tb2

问题: 速度有点慢,使用ws.Copy(Before:=.Item(1)) ,如果tb1里有30个sheet,需要等待一会儿,效率有点低,有其他方法吗?


源码:
Dim Wb As MSExcel.Workbook = App.WorkBooks.open(tb1)
Dim Ws As MSExcel.WorkSheet
Dim WbNew As MSExcel.Workbook = App.WorkBooks.open(tb2)
ShowAppWindow(tb3, 2) 
Dim wsNew As MSExcel.WorkSheet = Wb.WorkSheets(1) \'指定要复制的工作表
\'\'\'获取sheet名称
For Each WsName As MSExcel.WorkSheet In Wb.WorkSheets
    \'    Output.Show(WsName.Name)
    ws = Wb.WorkSheets(WsName.Name)
    With WbNew.WorkSheets
        ws.Copy(Before:=.Item(1))\'复制到最前面
    End With
    
Next
WbNew.Save

--  作者:有点蓝
--  发布时间:2023/9/20 15:57:00
--  
这个是execl组件自己的功能,慢也没有办法。

没有其它办法

--  作者:puma
--  发布时间:2023/9/20 16:13:00
--  
有一次性,把所有工作簿的sheet移动到另一个工作簿的sheet里吗?  不用for循环
--  作者:有点蓝
--  发布时间:2023/9/20 16:24:00
--  
没见过哦,都要循环的。

如果是移动,而不是复制,这个应该会快一点:http://www.foxtable.com/webhelp/topics/1465.htm
[此贴子已经被作者于2023/9/20 16:24:30编辑过]