在另一个工作簿中复制工作簿的VBA Excel问题-应用程序挂起在特定文件上复制



我有一个问题真的让我很困惑。

我正在复制'主'工作簿中的一组工作簿(复制所有工作表)。我可以使用两种方法,要么通过工作簿中的每个工作表复制主工作簿中的每个工作表,要么将工作簿作为一个整体复制并放置在主工作簿中。我使用的第二种方法是使用数组来丢弃我不需要的表。

Dim ws() As String ' declare string array
ReDim ws(wb.Worksheets.Count) As String ' set size dynamically
Dim counter As Long ' running counter for ws array
counter = 0
For c = 1 to WS_Count
If wb.Worksheets(c).Name <> "TEST" Then
    ws(counter) = wb.Worksheets(c).Name
    counter = counter + 1
End If
Next

ReDim Preserve ws(counter-1) As String wb.Worksheets(ws).Copy Before:=master.Worksheets(master.Worksheets.Count)

我尝试过的两种方法都可以很好地处理某些文件:

1)第一种方法是有问题的,因为它留下了对原始文件的引用,所以我移动到绕过这个问题的方法2,因为没有保留引用。

2)方法2在某个文件中导致某种形式的无限循环。有趣的是,如果我改变它们合并的顺序,命令不会卡住,另外大约50个工作簿的代码似乎工作得很好。(请注意,方法1不会出现此问题,但由于文件链接,方法1已被丢弃)

它被卡住的行(没有错误)是wb.Worksheets(ws).Copy Before:=master.Worksheets(master.Worksheets.Count)

有人遇到过不想合并文件的问题吗?我是不是碰到了什么极限?我不知所措,因为使用26个不同的工作簿,我的代码在其整体上设法创建了896个表的主工作簿。在这组卡住了,我合并了一个包含164个文件的新工作表的164个工作表文件。我用的是Office Professional Plus 2010。

我目前正在隐藏警报,但是我相信我正在处理那些询问我是否要等待应用程序的消息。

谁能告诉我正确的方向?

既然您正在跳过"测试"页面,您是否尝试过从最后一页开始并步骤-1?

For c = WS_Count to 1 
    If wb.Worksheets(c).Name <> "TEST" Then
        ws(counter) = wb.Worksheets(c).Name
        counter = counter - 1
    End If
Next c

相关内容

  • 没有找到相关文章

最新更新