使用 VBA 将工作表复制到新工作簿时,单元格变为 #REF 错误
Cells become #REF errors when using VBA to copy sheets into a new workbook
我正在尝试自动导出我每周生成的报告。基本上,它使用 VLOOKUP 和 INDIRECT 从一堆其他 sheet 中聚合数据。我想将摘要 sheet 作为仅值 sheet.
复制到新工作簿中
我认为可行的代码如下:
Sub ExportSSHMIL()
Application.ScreenUpdating = False
Application.CopyObjectsWithCells = False
Sheets(Array("SSH New Starts by Site by Week", "MIL New Starts by Site by Week")).Select
Sheets(Array("SSH New Starts by Site by Week", "MIL New Starts by Site by Week")).Copy
Sheets("SSH New Starts by Site by Week").Activate
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub
但是,当上面的代码 运行 时,sheet 被“成功”复制,但是使用上述 VLOOKUP 和 INDIRECT 的所有单元格现在都是 #REF 值。
如何才能将这些 sheet 仅作为值成功复制到新工作簿中?
谢谢你任何help/advice可以给我!!
编辑: 我忘了说 sheet 还包括图表和列组,理想情况下也可以复制它们。
编辑:
问题在于使用 INDIRECT
复制公式 - 如果不出现 #REF
错误,这些公式将无法转置。您需要先 copy/paste 值,创建新工作簿,然后在不保存的情况下关闭旧工作簿。类似于:
Sub ExportSSHMIL()
Application.ScreenUpdating = False
Application.CopyObjectsWithCells = False
Dim currwb As Workbook
Set currwb = ThisWorkbook
Sheets("SSH New Starts by Site by Week").Cells.Copy
Sheets("SSH New Starts by Site by Week").Cells.PasteSpecial Paste:=xlPasteValues
Sheets(Array("SSH New Starts by Site by Week", "MIL New Starts by Site by Week")).Copy
currwb.Close False
End Sub
请尝试下一种方式:
Dim sh As Worksheet, wb As Workbook, ws As Worksheet
Set sh = ActiveSheet ' Sheets("SSH New Starts by Site by Week")
Set wb = Workbooks.Add(xlWBATWorksheet)
Set ws = wb.Sheets(1)
If Not Application.CopyObjectsWithCells Then _
Application.CopyObjectsWithCells = True
sh.Copy 'it creates a new workbook containing the copy of the sheet...
With ActiveWorkbook.Sheets(1).Range("A1")
sh.UsedRange.Copy
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
.PasteSpecial Paste:=xlFormats
End With
ActiveWorkbook.Sheets(1).UsedRange.EntireColumn.AutoFit
End Sub
我正在尝试自动导出我每周生成的报告。基本上,它使用 VLOOKUP 和 INDIRECT 从一堆其他 sheet 中聚合数据。我想将摘要 sheet 作为仅值 sheet.
复制到新工作簿中我认为可行的代码如下:
Sub ExportSSHMIL()
Application.ScreenUpdating = False
Application.CopyObjectsWithCells = False
Sheets(Array("SSH New Starts by Site by Week", "MIL New Starts by Site by Week")).Select
Sheets(Array("SSH New Starts by Site by Week", "MIL New Starts by Site by Week")).Copy
Sheets("SSH New Starts by Site by Week").Activate
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub
但是,当上面的代码 运行 时,sheet 被“成功”复制,但是使用上述 VLOOKUP 和 INDIRECT 的所有单元格现在都是 #REF 值。
如何才能将这些 sheet 仅作为值成功复制到新工作簿中?
谢谢你任何help/advice可以给我!!
编辑: 我忘了说 sheet 还包括图表和列组,理想情况下也可以复制它们。
编辑:
问题在于使用 INDIRECT
复制公式 - 如果不出现 #REF
错误,这些公式将无法转置。您需要先 copy/paste 值,创建新工作簿,然后在不保存的情况下关闭旧工作簿。类似于:
Sub ExportSSHMIL()
Application.ScreenUpdating = False
Application.CopyObjectsWithCells = False
Dim currwb As Workbook
Set currwb = ThisWorkbook
Sheets("SSH New Starts by Site by Week").Cells.Copy
Sheets("SSH New Starts by Site by Week").Cells.PasteSpecial Paste:=xlPasteValues
Sheets(Array("SSH New Starts by Site by Week", "MIL New Starts by Site by Week")).Copy
currwb.Close False
End Sub
请尝试下一种方式:
Dim sh As Worksheet, wb As Workbook, ws As Worksheet
Set sh = ActiveSheet ' Sheets("SSH New Starts by Site by Week")
Set wb = Workbooks.Add(xlWBATWorksheet)
Set ws = wb.Sheets(1)
If Not Application.CopyObjectsWithCells Then _
Application.CopyObjectsWithCells = True
sh.Copy 'it creates a new workbook containing the copy of the sheet...
With ActiveWorkbook.Sheets(1).Range("A1")
sh.UsedRange.Copy
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
.PasteSpecial Paste:=xlFormats
End With
ActiveWorkbook.Sheets(1).UsedRange.EntireColumn.AutoFit
End Sub