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]的任何字符串,因为它不是一个优雅的解决方案.任何指向正确的方向将不胜感激.
如果您一次复制所有工作表,公式参考将指向复制的工作表而不是源工作表.您将获得与使用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)
请注意,此代码未经测试.