没有原始工作簿参考的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。