没有原始工作簿参考的Excel VBA复印表

我有一个例程,它复制了许多工作簿中的各种工作表,并将这些工作表粘贴到“主”工作簿(包含不同工作簿中的不同工作表)中。

代码运行良好,但是它也保留了对原始表格的引用,例如通常的“额外” =SUM([Book1]Sheet1!C13:G13) (以保持示例简单)。

我正在复制的工作表需要以完全相同的格式进行复制,我使用以下命令:

 Dim WS_Count As Integer WS_Count = wb.Worksheets.Count For c = 1 To WS_Count If wb.Sheets(c).Name <> "TEST" Then wb.Sheets(c).Copy Before:=master.Worksheets(master.Sheets.Count) End If Next 

文档的复制和合并工作得非常好,但是我也在复制工作簿中的一些汇总表,这些工作表包含对表单的内部引用,并且在没有原始工作簿引用[Book1]的情况下复制时遇到困难。 由于有许多源工作簿文档,因此在处理主工作簿时,我不知道工作簿的文件名。

我的问题是,有没有办法复制一个表格的所有格式,而不复制单元格工作簿参考?

我也尝试了所有变化的粘贴/粘贴特殊但是这或者丢失工作表格式或仍然保留其他工作簿参考。

我希望避免必须查找并replace包含[… .xls]的string,因为它不是一个优雅的解决scheme。 任何指针正确的方向将不胜感激。

如果您一次复印所有工作表,公式参考将指向复制的工作表而不是源表单。 您将通过以下代码的帮助实现与使用Shiftselect多个工作表相同的function:

 wb.Worksheets(Array("Sheet1", "Sheet2")).Copy Before:=master.Worksheets(master.Worksheets.Count) 

所以如果你的工作表名字是固定的,你可以replaceArray()函数内部的调用,否则你需要在你的For c = 1 To WS_Count循环中创build一个合适的数组,然后调用一次拷贝代码:

 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 = 1 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) As String ' Strip of superfluous empty array entries (ie TEST sheets wb.Worksheets(ws).Copy Before:=master.Worksheets(master.Worksheets.Count) 

请注意,此代码未经testing。