将工作表复制到另一个工作簿,引用指向新工作簿

时间:2014-05-09 17:27:35

标签: excel vba copy formulas

这是我面临的情况:

我有一个包含两个工作表的工作簿,“Survey”和“Configuration”。配置工作表具有链接到测量工作表的单元格。

我正在尝试将这些工作表复制到新工作簿中。但是,完成复制后,新工作簿中“配置”选项卡中的单元格将指向旧工作簿。我想到的一个解决方案是将值复制到新工作表/新工作簿,但我的客户端不希望这样:他们希望公式仍然存在,以防他们想要更新“调查”选项卡上的某些数据并让它继续进行配置。

有没有办法复制工作表,以便任何单元格引用保持不变(即仍然指向“Survey!A1”而不是指向“OldWorkbook!Survey!A1”?

修改 我正在尝试使用Worksheets(Array(...))。复制方法。我现在遇到的问题是我有一个字符串数组,其中包含两个源工作簿共有的工作表的名称。如果我将数组替换为数组(...),则代码会爆炸。不幸的是,我不知道哪些工作表对源工作簿是通用的,所以我不能硬编码Array函数的列表,我尝试创建一个看起来像Array的参数列表的字符串并使用它,但代码也不喜欢这样。


    'Initialize indexes and arrays and stuff
    intSheetsInCommonIndex = 1
    intDiscrepanciesIndex = 1
    intSheetsInNPEIndex = 1
    lngDiscrepancyBackColor = RGB(202, 6, 95)
    Application.ScreenUpdating = False

    For intInner = 1 To 40
        strSheetsInCommon(intInner) = ""
        strSheetsInNPE(intInner) = ""
    Next intInner

    'Set up the pointers to the two source workbooks.
    Set xlNPEWorkbook = Application.Workbooks.Open(Sheets("Combine PE Workbooks").txtNPEDocLocation)
    Set xlSPEWorkbook = Application.Workbooks.Open(Sheets("Combine PE Workbooks").txtSPEDocLocation)

    'Now, fill the strSheetsInNPE array
    For Each xlNPECurrentSheet In xlNPEWorkbook.Sheets
        strSheetsInNPE(intSheetsInNPEIndex) = xlNPECurrentSheet.Name
        intSheetsInNPEIndex = intSheetsInNPEIndex + 1
    Next xlNPECurrentSheet

    'Now go through the SPE document.  If the workhseet's name is in strSheetsInNPE, add that name to strSheetsInCommon.
    For Each xlSPECurrentSheet In xlSPEWorkbook.Sheets
        For intInner = 1 To intSheetsInNPEIndex
            If xlSPECurrentSheet.Name = strSheetsInNPE(intInner) Then
                strSheetsInCommon(intSheetsInCommonIndex) = xlSPECurrentSheet.Name
                intSheetsInCommonIndex = intSheetsInCommonIndex + 1
                Exit For
            End If
        Next intInner
    Next xlSPECurrentSheet

    'Turn alerts off (so that the messages about named ranges don't show up) and turn on the hourglass.
    Application.DisplayAlerts = False
    Application.Cursor = xlWait

    'Create the combined document
    Set xlCombinedWorkbook = Workbooks.Add
    xlCombinedWorkbook.UpdateLinks = xlUpdateLinksNever

    'Go through the NPE document and add all worksheets from there to the new workbook.

    xlNPEWorkbook.Worksheets(Array(strSheetsInCommon)).Copy xlCombinedWorkbook.Sheets(1)

如果有人对如何使用我的工作表名称数组进行多页复印有任何建议,我将不胜感激。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

也许我忽略了一些细节,但为什么不简单地使用SaveAs将旧工作簿保存到新工作簿?参考文献将到位,您将有一个新的工作簿。