我有一个问题真的让我很困惑。
我正在复制'主'工作簿中的一组工作簿(复制所有工作表)。我可以使用两种方法,要么通过工作簿中的每个工作表复制主工作簿中的每个工作表,要么将工作簿作为一个整体复制并放置在主工作簿中。我使用的第二种方法是使用数组来丢弃我不需要的表。
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