我有一个问题,实话实说让我很困惑。
我正在复制一个“主”工作簿中的一组工作簿(复制所有工作表)。 有两种方法可以使用,要么通过复制每个工作簿中的每个工作表来逐个复制到主工作簿中,或者将整个工作簿复制并放置在主工作簿中。 我正在使用第二种方法,使用数组丢弃不需要的工作表。
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)第二种方法在某些文件中会导致某种无限循环。有趣的是,如果我改变它们合并的顺序,命令就不会卡住,在另外约50个工作簿的情况下,代码似乎可以正常工作。(请注意,这个问题不会发生在方法1上,但由于文件链接已被丢弃,因此该方法已被放弃)
它被卡住的那行代码(没有错误)是
wb.Worksheets(ws).Copy Before:=master.Worksheets(master.Worksheets.Count)
有人遇到过文件不想合并的问题吗?我是否达到了某个限制?我很迷茫,因为在使用26个不同的工作簿时,我的整个代码成功创建了一个包含896个工作表的主工作簿。在这个被卡住的集合中,我正在将一个包含164个文件的工作表文件与一个新的包含164个文件的工作表合并。 我使用的是Office Professional Plus 2010。
我目前正在隐藏警报,但我相信我收到了一个消息,询问我是否要等待应用程序。
能否有人指点我正确的方向?
dictionary.Keys()
或dictionary.Values()
都会返回一个数组 :) 但是,是的,工作表的数量似乎是这里的问题。 - David Zemens