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

Eri*_*ika 4 excel vba copy reference worksheet

我有一个例程,就是从许多工作簿中复制各种工作表,并将这些工作表粘贴到我称之为"主"工作簿(其中包含来自不同工作簿的不同工作表)中.

代码运行良好,但它也保留了对原始工作表的引用,例如通常的"额外" =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
Run Code Online (Sandbox Code Playgroud)

复制和合并文档非常有效,因为我还从工作簿中复制了一些摘要表,这些摘要表包含对工作表的内部引用,我在没有原始工作簿参考[Book1]的情况下遇到复制困难.我正在处理主工作簿时,我不知道工作簿的文件名,因为有许多源工作簿文档.

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

我还尝试了粘贴/粘贴特殊的所有变体,但这会丢失工作表格式或仍保留其他工作簿参考.

我希望避免查找和替换包含[... .xls]的任何字符串,因为它不是一个优雅的解决方案.任何指向正确的方向将不胜感激.

MP2*_*P24 5

如果您一次复制所有工作表,公式参考将指向复制的工作表而不是源工作表.您将获得与使用Shift在以下代码的帮助下选择多个工作表相同的功能:

wb.Worksheets(Array("Sheet1", "Sheet2")).Copy Before:=master.Worksheets(master.Worksheets.Count)
Run Code Online (Sandbox Code Playgroud)

因此,如果您的工作表名称是固定的,您可以替换Array()函数调用内部,否则您需要在For c = 1 To WS_Count循环内创建一个适当的数组并在之后调用复制代码:

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 (i.e. TEST sheets
wb.Worksheets(ws).Copy Before:=master.Worksheets(master.Worksheets.Count)
Run Code Online (Sandbox Code Playgroud)

请注意,此代码未经测试.